用程序什么写让WPF中的Visibility属性来控制控件的显示和隐藏,同时保留之前的设置。
时间: 2024-05-06 16:18:59 浏览: 14
可以通过创建一个附加属性来实现控制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属性设置的情况下,动态控制控件的显示和隐藏了。