是否可以在同一用户控件中访问依赖项 属性 的值?

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>