がExpanded
イベントを処理し、BringIntoView()
メソッドを呼び出す:
private void Expander_Expanded(object sender, RoutedEventArgs e)
{
((Expander)sender).BringIntoView();
}
をあなたの代わりにGrid
のStackPanelのか、何か他のものを使用する必要があることに注意してください:
<ScrollViewer Name="sv">
<UserControl>
<StackPanel>
<Expander>
<Border Height="1000" Background="Red"/>
</Expander>
<Expander>
<Border Height="1000" Background="Blue"/>
</Expander>
<Expander Expanded="Expander_Expanded">
<Border Height="1000" Background="Green"/>
</Expander>
</StackPanel>
</UserControl>
</ScrollViewer>
編集
あなたはこの添付プロパティを使用することがあります:
public static class ExpanderEx
{
public static readonly DependencyProperty BringIntoViewOnExpandProperty =
DependencyProperty.RegisterAttached("BringIntoViewOnExpand",
typeof(bool), typeof(ExpanderEx),
new PropertyMetadata(false, OnBringIntoViewOnExpandChanged));
public static bool GetBringIntoViewOnExpand(DependencyObject obj)
{
return (bool)obj.GetValue(BringIntoViewOnExpandProperty);
}
public static void SetBringIntoViewOnExpand(DependencyObject obj, bool value)
{
obj.SetValue(BringIntoViewOnExpandProperty, value);
}
private static void OnBringIntoViewOnExpandChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
if (d is Expander)
{
Expander obj = (Expander)d;
if (e.NewValue.Equals(true))
obj.Expanded += Obj_Expanded;
else
obj.Expanded -= Obj_Expanded;
}
}
private static void Obj_Expanded(object sender, RoutedEventArgs e)
{
((Expander)sender).BringIntoView();
}
}
とXAMLで:
<ScrollViewer Name="sv">
<UserControl>
<StackPanel>
<Expander local:ExpanderEx.BringIntoViewOnExpand="True">
<Border Height="1000" Background="Red"/>
</Expander>
<Expander local:ExpanderEx.BringIntoViewOnExpand="True">
<Border Height="1000" Background="Blue"/>
</Expander>
<Expander local:ExpanderEx.BringIntoViewOnExpand="True">
<Border Height="1000" Background="Green"/>
</Expander>
</StackPanel>
</UserControl>
</ScrollViewer>
出典
2017-03-01 20:56:15
Ron
私はこれを試みたが、それが働きました。しかし、私はそれを仕事にした方法ではありません:私はwpfに新しいので、私と一緒に耐える。私はExpanderExクラスをどこに置いて、これを多くのビューで再利用できるのですか?私はそれを試してみましたが、私はクラスをビューと同じプロジェクトに入れ、ビューのコードビハインド内に置かなければなりませんでした。...そうではありません... – merger
あなたの好みで選んでください。その静的クラスは別です。たとえば、** extentions.cs **ファイルを作成し、そこに拡張機能を追加します。重要なことは、[XAML名前空間宣言](https://msdn.microsoft.com/en-us/library/ms747086(v = vs.110).aspx)を正しく設定することです。 – Ron
私は静的なクラスでそれを持っていた。私が前にそれをテストしたとき、私は間違ったことをしたと思います。今度はクラスを共有プロジェクトに移して、VSがxamlファイル内の名前空間参照を作成し、再コンパイルしても動作させました。ありがとう、あなたのコメントは私に別の方法で同じことを試して、それが働いている:) – merger