Created
December 3, 2012 01:23
-
-
Save biac/4192018 to your computer and use it in GitHub Desktop.
GridView 中の ScrollViewer の余白と水平スクロール位置を指定できる、拡張コントロール
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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); | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
ItemTemplate を適用して ScrollViewer や ItemsPresenter を置き換えたりした場合の対処を何にもやってないので、自己責任でお使いくださいまし。