WPF中更改控件可见性的优雅方法

5

我希望你能在IT技术领域为我进行翻译。以下是需要翻译的内容,它与控件可见性和Windows表单应用程序有关:

我发现有更多的问题与这个主题相关,但我没有找到答案。

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

在Windows表单应用程序中,如果我没记错,我可以使用类似以下的语句:

somecontrol.Visible = !somecontrol.Visible;

但是如果应用程序是wpf,我无法使用这种方法。

有没有更加"优雅"的方法来实现这个功能,而不是使用if-else

谢谢。

3个回答

13

在WPF中,UIElement.Visibility有3种状态:Visible(可见)/Hidden(隐藏)/Collapsed(折叠)。

如果是Hidden状态,则控件仍然会影响周围控件的布局,而Visibility值为Collapsed的元素不占用任何布局空间。

您可以在Visible、Hidden和Collapsed之间切换。

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

4
在WPF中,您要更改的属性称为Visibility,您可以按照下面描述的方式使用它。
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

在WPF中,自然的选择是使用MVVM模式。因此,您可以像这样拥有一个控件:

<Button Content="I'm a button"
        Visibility={Binding BtnVis} />

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

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

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


1
永远不要忘记提到 class DataContext 必须实现 INotifyPropertyChanged - Clemens

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接