背景: aとともに
a がusercontrol
定義されては常に表示され、その中に があり、ボタンをクリックすると が に設定され、(ときに() がスクロールされます。景色。私は持っているScrollViewer
ContentControl
ContentControl
Button
usercontrol
Visible
usercontrol
Visiblility="Visible"
XAML
<ScrollViewer VerticalScrollBarVisibility="Auto" MaxHeight="465">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<ContentControl Content="{Binding MyOtherViewModel}" Width="960" ></ContentControl>
<local:MyView IsVisibleChanged="MyView_IsVisibleChanged" Grid.Row="1" Visibility="{Binding IsNonCompliant, Converter={StaticResource BooltoVisible}, UpdateSourceTrigger=PropertyChanged}" />
</ScrollViewer>
コードビハインド
private void MyView_IsVisibleChanged(object sender, DependencyPropertyChangedEventArgs e)
{
(sender as Control).BringIntoView();
}
問題:これは機能していません。より正確には、最初にビューに、瞬く間にusercontrol
下に戻りますScrollViewer
奇妙なこと:messagebox
呼び出す前にaすると、ビューの中央にBringIntoView
my が正しく表示usercontrol
現在のハックソリューション:Window
これは、その直後に閉じても機能することがわかりますloaded
private void MyView_IsVisibleChanged(object sender, DependencyPropertyChangedEventArgs e)
{
Window ss = new Window();
ss.Loaded += new RoutedEventHandler(ss_Loaded);
ss.ShowDialog();
(sender as Control).BringIntoView();
}
private void ss_Loaded(object sender, RoutedEventArgs e)
{
(sender as Window).Close();
}
質問:何か他のことが起こっているに違いないことはわかっていますが、それを特定することはできませんShowDialog
。これは、がロードされた後にのみ発生リフレッシュするwindow
ため(私が今抱えている問題とは異なります:最初に発生し、次にリフレッシュしてトップに戻します)。そして、私の問題の正しい修正は何ですか?BringIntoView
usercontrol
BringIntoView
window
scrollbar