是否可以在同一用户控件中访问依赖项 属性 的值?
Is it possible to access to value of a depedency property in the same user control?
我在用户控件中有一个依赖项 属性,它是一个布尔值,我想根据它的值来隐藏或显示按钮。
我的依赖属性是这样的:
public static readonly DependencyProperty EnableProperty =
DependencyProperty.Register("Enable", typeof(bool),
typeof(MyView), new PropertyMetadata(false);
public bool Enable
{
get
{
return (bool)GetValue(EnableProperty);
}
set
{
SetValue(EnableProperty, value);
}
}
我的用户控件
<Button.Style>
<Style TargetType="Button">
<Setter Property="Visibility" Value="Collapsed"/>
<Style.Triggers>
<DataTrigger Binding="Enable" Value="true">
<Setter Property="Visibility" Value="Visible"/>
</DataTrigger>
</Style.Triggers>
</Style>
</Button.Style>
我主要使用用户控件的用户控件
<views:MyView DataContext="{Binding MyDataContext}"
Enable="True"/>
但是当我将依赖项 属性 设置为 true 时,按钮没有显示。我想问题是我不知道如何访问用户控件的依赖项 属性。
只需像这样编辑用户控件:
MyControl.xaml
<UserControl
x:Class="MyApp.MyControl"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
x:Name="ThisControl">
<Grid>
<Button Content="Click me">
<Button.Style>
<Style TargetType="Button">
<Setter Property="Visibility" Value="Collapsed" />
<Style.Triggers>
<DataTrigger Binding="{Binding Enable, ElementName=ThisControl}" Value="True">
<Setter Property="Visibility" Value="Visible" />
</DataTrigger>
</Style.Triggers>
</Style>
</Button.Style>
</Button>
</Grid>
</UserControl>
您应该使用 RelativeSource
绑定到父 MyView
用户控件,否则绑定将尝试在当前数据上下文中解析 Enable
属性,未定义的地方。
<Button.Style>
<Style TargetType="Button">
<Setter Property="Visibility" Value="Collapsed"/>
<Style.Triggers>
<DataTrigger Binding="{Binding Enable, RelativeSource={RelativeSource AncestorType={x:Type local:MyView}}}" Value="true">
<Setter Property="Visibility" Value="Visible"/>
</DataTrigger>
</Style.Triggers>
</Style>
</Button.Style>
我在用户控件中有一个依赖项 属性,它是一个布尔值,我想根据它的值来隐藏或显示按钮。
我的依赖属性是这样的:
public static readonly DependencyProperty EnableProperty =
DependencyProperty.Register("Enable", typeof(bool),
typeof(MyView), new PropertyMetadata(false);
public bool Enable
{
get
{
return (bool)GetValue(EnableProperty);
}
set
{
SetValue(EnableProperty, value);
}
}
我的用户控件
<Button.Style>
<Style TargetType="Button">
<Setter Property="Visibility" Value="Collapsed"/>
<Style.Triggers>
<DataTrigger Binding="Enable" Value="true">
<Setter Property="Visibility" Value="Visible"/>
</DataTrigger>
</Style.Triggers>
</Style>
</Button.Style>
我主要使用用户控件的用户控件
<views:MyView DataContext="{Binding MyDataContext}"
Enable="True"/>
但是当我将依赖项 属性 设置为 true 时,按钮没有显示。我想问题是我不知道如何访问用户控件的依赖项 属性。
只需像这样编辑用户控件:
MyControl.xaml
<UserControl
x:Class="MyApp.MyControl"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
x:Name="ThisControl">
<Grid>
<Button Content="Click me">
<Button.Style>
<Style TargetType="Button">
<Setter Property="Visibility" Value="Collapsed" />
<Style.Triggers>
<DataTrigger Binding="{Binding Enable, ElementName=ThisControl}" Value="True">
<Setter Property="Visibility" Value="Visible" />
</DataTrigger>
</Style.Triggers>
</Style>
</Button.Style>
</Button>
</Grid>
</UserControl>
您应该使用 RelativeSource
绑定到父 MyView
用户控件,否则绑定将尝试在当前数据上下文中解析 Enable
属性,未定义的地方。
<Button.Style>
<Style TargetType="Button">
<Setter Property="Visibility" Value="Collapsed"/>
<Style.Triggers>
<DataTrigger Binding="{Binding Enable, RelativeSource={RelativeSource AncestorType={x:Type local:MyView}}}" Value="true">
<Setter Property="Visibility" Value="Visible"/>
</DataTrigger>
</Style.Triggers>
</Style>
</Button.Style>