Skip to content

Instantly share code, notes, and snippets.

@biac
Created December 3, 2012 01:23
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save biac/4192018 to your computer and use it in GitHub Desktop.
Save biac/4192018 to your computer and use it in GitHub Desktop.
GridView 中の ScrollViewer の余白と水平スクロール位置を指定できる、拡張コントロール
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
namespace BluewaterSoft.DevTools.Win8Common.Control
{
public class CustomGridView : GridView
{
private ScrollViewer _sv;
private ItemsPresenter _ip;
private Thickness _ipOriginalPadding;
private Thickness _ipAddedPadding;
protected override void OnApplyTemplate()
{
base.OnApplyTemplate();
_sv = (ScrollViewer)this.GetTemplateChild("ScrollViewer");
_ip = _sv.Content as ItemsPresenter;
_ipOriginalPadding = _ip.Padding;
SetPadding();
}
private void SetPadding(Thickness padding)
{
_ipAddedPadding = padding;
SetPadding();
}
private void SetPadding()
{
if (_ip == null)
return;
_ip.Padding = new Thickness(_ipOriginalPadding.Left + _ipAddedPadding.Left,
_ipOriginalPadding.Top + _ipAddedPadding.Top,
_ipOriginalPadding.Right + _ipAddedPadding.Right,
_ipOriginalPadding.Bottom + _ipAddedPadding.Bottom);
}
/// <summary>
/// 概要:
/// スクロールしたコンテンツの水平オフセットを示す値を取得・設定します。
/// </summary>
public double HorizontalOffset
{
get { return _sv.HorizontalOffset; }
set { _sv.ScrollToHorizontalOffset(value); }
}
/// <summary>
/// 概要:
/// GridView の中の ScrollViewer と、その子オブジェクトの間の間隔を取得または設定します。
/// </summary>
/// <value>
/// 戻り値:
/// プレゼンターとその子要素の間の間隔を示す Thickness 値。Thickness は、ピクセル計測を使用してサイズ値を格納する構造体です。
/// </value>
public Thickness ScrollViewerPadding
{
get { return (Thickness)GetValue(ScrollViewerPaddingProperty); }
set { SetValue(ScrollViewerPaddingProperty, value); }
}
public static readonly DependencyProperty ScrollViewerPaddingProperty
= DependencyProperty.RegisterAttached(
"ScrollViewerPadding",
typeof(Thickness),
typeof(CustomGridView),
new PropertyMetadata(default(Thickness), OnScrollViewerPaddingChangedCallback)
);
private static void OnScrollViewerPaddingChangedCallback(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
CustomGridView g = d as CustomGridView;
g.SetPadding((Thickness)e.NewValue);
}
}
}
@biac
Copy link
Author

biac commented Dec 3, 2012

ItemTemplate を適用して ScrollViewer や ItemsPresenter を置き換えたりした場合の対処を何にもやってないので、自己責任でお使いくださいまし。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment