WPF--->控件的隐藏与显示Visibility属性

Visible元素在窗体中正常显示
Collaspsed元素不显示,也不占用空间
Hidden元素不显示,但是任然为它保留空间
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以通过创建一个附加属性来实现控制WPF控件Visibility属性显示隐藏,并且保留之前的设置。下面是示例代码: 首先在项目中创建一个名为"VisibilityExtension"的类,代码如下: ```csharp using System.Windows; namespace YourNamespace { public static class VisibilityExtension { public static readonly DependencyProperty IsVisibleProperty = DependencyProperty.RegisterAttached("IsVisible", typeof(bool), typeof(VisibilityExtension), new FrameworkPropertyMetadata(true, FrameworkPropertyMetadataOptions.BindsTwoWayByDefault, OnIsVisibleChanged)); private static readonly DependencyProperty OriginalVisibilityProperty = DependencyProperty.RegisterAttached("OriginalVisibility", typeof(Visibility), typeof(VisibilityExtension), new FrameworkPropertyMetadata(default(Visibility))); public static bool GetIsVisible(DependencyObject obj) { return (bool)obj.GetValue(IsVisibleProperty); } public static void SetIsVisible(DependencyObject obj, bool value) { obj.SetValue(IsVisibleProperty, value); } private static void OnIsVisibleChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) { var fe = d as FrameworkElement; if (fe == null) return; if ((bool)e.NewValue) { if (fe.ReadLocalValue(OriginalVisibilityProperty) != DependencyProperty.UnsetValue) fe.Visibility = (Visibility)fe.GetValue(OriginalVisibilityProperty); else fe.Visibility = Visibility.Visible; } else { if (fe.Visibility != Visibility.Collapsed && fe.Visibility != Visibility.Hidden) fe.SetValue(OriginalVisibilityProperty, fe.Visibility); fe.Visibility = Visibility.Collapsed; } } } } ``` 在XAML中添加以下命名空间: ```xaml xmlns:local="clr-namespace:YourNamespace" ``` 代码中的"YourNamespace"应替换为你的命名空间。 然后可以在控件上使用附加属性来控制控件Visibility属性: ```xaml <Button local:VisibilityExtension.IsVisible="{Binding IsButtonVisible}" Content="Click me" /> ``` 在ViewModel中使用属性来控制控件显示隐藏: ```csharp private bool _isButtonVisible; public bool IsButtonVisible { get { return _isButtonVisible; } set { if (_isButtonVisible != value) { _isButtonVisible = value; RaisePropertyChanged(() => IsButtonVisible); } } } ``` 这样就可以实现在保留之前Visibility属性设置的情况下,动态控制控件显示隐藏了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值