【发布时间】:2010-10-29 14:29:16
【问题描述】:
我已经为此苦苦挣扎了很长一段时间,但似乎找不到合适的解决方案。这是被剥离的场景。假设您有以下 XAML:
<Grid x:Name="LayoutRoot" Background="White">
<Grid x:Name="Host" Width="200" Height="200">
<Popup IsOpen="True">
<Button Content="Some Button" Click="Button_Click" />
</Popup>
</Grid>
</Grid>
在 Button_Click 事件处理程序中,我所做的只是折叠名称为 Host 的网格。
private void Button_Click(object sender, RoutedEventArgs e)
{
this.Host.Visibility = System.Windows.Visibility.Collapsed;
}
我所期望的是弹出窗口会关闭因此隐藏按钮。我知道弹出窗口不在同一个 VisualTree 中,并且我理解为什么这可能无法按我期望的方式工作,但是应该有某种机制可以自动发生这种情况。我想到的唯一解决方法是在 LayoutUpdated 上遍历可视树并询问每个 Button 的父级是否可见以及我是否遇到折叠的父级 -> 关闭弹出窗口。然而,想象一下有一个巨大的视觉树的性能冲击。在每个布局通道上遍历可视化树是很疯狂的。 我愿意接受任何形式的建议。
编辑:似乎我没有完全解释我的情况。如果其父级的 ANY 被折叠(不仅仅是直接的),则情况是折叠弹出窗口。在 WPF 中有一个有用的属性称为 IsVisible,它不同于可见性。例如,Visibility 可能仍然是 Visible,但在这种情况下 IsVisible 将是 false。
最好的问候, 克
【问题讨论】:
标签: silverlight layout