在 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
我找到了更多关于这个主题的问题,但找不到答案。
我需要更改控件点击时的可见性。
在 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