背景:
我在 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顶部)。我的问题的正确解决方法是什么?