优雅的方式来改变wpf中的控制可见性

时间:2015-08-03 08:55:16

标签: c# wpf wpf-controls

我发现有关此主题的更多问题,但我找不到答案。

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

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

somecontrol.Visible = !somecontrol.Visible;

但当app为wpf时,我无法使用这种方式。

有没有办法以“优雅”的方式执行此操作if-else

Thanx

3 个答案:

答案 0 :(得分:8)

在WPF UIElement.Visibility有3个状态;可见/隐藏/折叠。

如果隐藏,控件仍会影响周围控件的布局,可见性值为Collapsed的元素不会占用任何布局空间。

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

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

答案 1 :(得分:3)

在WPF中,您尝试更改的属性称为可见性,您可以按照以下说明使用它。

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

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

  

有没有办法在某些事情上做到这一点"优雅"然后if-else?

如果你不想写整个构造,只需使用较短的形式..

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

答案 2 :(得分:2)

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

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

在您的DataContext中,您将拥有一个可以根据自己的意愿设置的公共属性。

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

另一个常用的选择是使用转换器,因为在您的ViewModel中,您可能希望拥有bool属性,而不是UIElement.Visibility属性。