在 wpf 中更改控件可见性的优雅方式

Elegant way to change control visibility in wpf

我找到了更多关于这个主题的问题,但找不到答案。

我需要更改控件点击时的可见性。

在 win form app 中,如果我是对的,我可以使用类似的东西:

somecontrol.Visible = !somecontrol.Visible;

但是当应用程序是wpf时,我不能使用这种方式。

有没有什么办法可以"elegant"然后if-else

谢谢

在 WPF 中 UIElement.Visibility 有 3 个状态; Visible/Hidden/Collapsed.

如果隐藏,该控件仍会影响周围控件的布局,Visibility 值为 Collapsed 的元素不占用任何布局space。

您可以在可见和隐藏或折叠之间切换。

somecontrol.Visibility = somecontrol.Visibility == Visibility.Visible ? Visibility.Collapsed : Visibility.Visible;

WPF 上下文中的自然选项是使用 MVVM 模式。所以你有一个像

这样的控件
<Button Content="I'm a button"
        Visibility={Binding BtnVis} />

并且在您的 DataContext 中,您将有一个 public 属性,您可以根据自己的意愿进行设置。

class DataContext
{
    public Visibility BtnVis { get; set; }
}

另一个常用的选择是使用转换器,因为也许在您的 ViewModel 中您想要一个布尔值 属性,而不是 UIElement.Visibility

在 WPF 中,您尝试更改的 属性 称为 Visibility 您可以按如下所述使用它..

uiElement.Visibility = Visibility.Hidden;
                    // Visibility.Collapsed;
                    // Visibility.Visible;

各州的互动就像@Glen 已经提到的那样。 你是什​​么意思..

Is there way to do this on something "elegant" way then if-else?

如果您不想编写整个结构,只需使用较短的形式..

uiElement.Visibility = uiElement.Visibility == Visibility.Visible // condition
    ? Visibility.Collapsed // if-case
    : Visibility.Visible;  // else-case