背景:
我在 ausercontrol
中定义了 aScrollViewer
和 aContentControl
,ContentControl
将始终可见,并且在其中有 aButton
,单击按钮时将设置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
调用前显示一个BringIntoView
将正确显示我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
顶部)。我的问题的正确解决方法是什么?