我有一个WPF表单,基本上看起来像这样:
<Window ...>
<Grid>
<DockPanel>
[content shown during normal operation]
</DockPanel>
<Grid Background="#CCCC" Visibility="Hidden">
[overlay grid which is only shown during special circumstances]
</Grid>
</Grid>
</Window>
覆盖网格隐藏了所有其他内容(即“正常内容”),只有在特殊情况下才会显示(即如果网络连接中断)。这在运行程序时非常有效。
现在,在设计模式中,问题是Visual Studio忽略了Visibility="Hidden"
。通常,这是非常有意义的(毕竟,我希望能够编辑隐藏的UI元素),但在我的情况下,这是令人讨厌的,因为它阻止我编辑设计器中DockPanel中的内容。
所以,我想做的是这样的:
<Grid Background="#CCCC" Visibility="Hidden" VS.ShowInDesigner="False">
[overlay grid which is only shown during special circumstances]
</Grid>
但是,唉,没有这样的财产,或者至少我不知道。有什么想法吗?
8条答案
按热度按时间vecaoik11#
从VS2012开始,您可以只使用Blend名称空间IsHidden属性:
yi0zb3m42#
好办法,我也遇到过类似的问题,我同意在某些情况下需要这样做。这里有一个小的更新,允许你在设计时编辑值来打开和关闭IsHidden。我还应用了ScaleTransform而不是设置宽度和高度,以减少屏幕伪像,如果控件夹等显示,并避免冲突,如果被隐藏的控件已经设置了宽度和高度属性(假设控件尚未设置LayoutTransform)。
ef1yzkbh3#
干得好!我把它翻译成了C#,并把它的属性改成了RenderTransform。
uemypmqf4#
由于没有内置的方法来实现这一点,我决定自己实现一个解决方案,使用附加属性可以非常容易地做到这一点:
声明命名空间后,可以按如下方式使用该功能:
c9x0cxw05#
除了不使用设计器之外(真的,考虑一下这个),您可以将
Grid
的内容分离到一个单独的UserControl
中,这样,您就可以独立于可见性逻辑更新那个UserControl
。shstlldc6#
我最近也遇到过类似的问题。
我正在使用一个Rectangle在模式对话框执行期间隐藏主窗口。我绑定了可见性数据,但是Rectangle使设计器无法使用。我将Z索引作为一次性数据绑定,并且回退值低于我想要隐藏的窗口。当应用程序启动时,Rectangle的Z索引被绑定到一个高于窗口的值。
yvgpqqbh7#
我在另一边...讨厌VS 2012在设计器中隐藏隐藏WPF控件。我需要看到它们,所以我修改了gregsdennis代码:
wpfClasses2:DesignModeTool.IsHidden =“False”将在设计器模式下显示控件。
vwhgwdsa8#
可能对其他人有用。如果你想在VS2022的设计器模式下隐藏元素: