Can';不要在WPF中的触发器中使用按钮属性

Can';不要在WPF中的触发器中使用按钮属性,wpf,button,triggers,Wpf,Button,Triggers,我有一个自定义内容的按钮(一个红色的圆圈)定义在一个用户控件中,如果按钮被禁用,我希望圆圈变为灰色 我尝试了以下内容,但它无法编译 错误:“IsEnabled”成员无效,因为它没有限定的类型名称 能解释一下我做错了什么吗 <Button> <Button.Content> <Grid> <Ellipse x:Name="circle" Width="20" Height="20" Fill="Red"/&

我有一个自定义内容的按钮(一个红色的圆圈)定义在一个用户控件中,如果按钮被禁用,我希望圆圈变为灰色

我尝试了以下内容,但它无法编译

错误:“IsEnabled”成员无效,因为它没有限定的类型名称

能解释一下我做错了什么吗

<Button>
    <Button.Content>
        <Grid>
             <Ellipse x:Name="circle" Width="20" Height="20" Fill="Red"/>
        </Grid>
     </Button.Content>
     <Button.Triggers>
         <Trigger Property="IsEnabled" Value="False">
        <Setter TargetName="circle" Property="Fill" Value="Gray"/>
          </Trigger>
      </Button.Triggers>
</Button>

IsEnabled
是一个依赖属性,定义在
按钮继承的类上;XAML要求您显式指定所属类型。请改为尝试
Trigger Property=“UIElement.IsEnabled”

IsEnabled
是在
按钮继承的类上定义的DependecProperty;XAML要求您显式指定所属类型。请尝试使用
Trigger Property=“UIElement.IsEnabled”

以下是一种方法:

<Button Name="btn" >
    <Ellipse Height="20" Width="20">
        <Ellipse.Style>
            <Style TargetType="Ellipse">
                <Setter Property="Fill" Value="Red" />
                <!-- Here is the 'normal' content -->
                <Style.Triggers>
                    <DataTrigger Binding="{Binding IsEnabled, ElementName=btn}" Value="False">
                    <Setter Property="Fill" Value="Blue" />
                    <!-- Here is the 'override' content -->
                    </DataTrigger>
                </Style.Triggers>
            </Style>
        </Ellipse.Style>
    </Ellipse>
</Button>

DataTriggers只在样式中工作,因此我们需要将接收样式但绑定到控件中另一个元素的实际元素作为目标。

以下是一种方法:

<Button Name="btn" >
    <Ellipse Height="20" Width="20">
        <Ellipse.Style>
            <Style TargetType="Ellipse">
                <Setter Property="Fill" Value="Red" />
                <!-- Here is the 'normal' content -->
                <Style.Triggers>
                    <DataTrigger Binding="{Binding IsEnabled, ElementName=btn}" Value="False">
                    <Setter Property="Fill" Value="Blue" />
                    <!-- Here is the 'override' content -->
                    </DataTrigger>
                </Style.Triggers>
            </Style>
        </Ellipse.Style>
    </Ellipse>
</Button>


DataTriggers只在样式中工作,因此我们需要将接收样式的实际元素作为目标,但绑定到控件中的另一个元素。

我选择了您的答案,因为它与我所做的接近。我用所需的内容定义了不同的样式,并在按钮中添加了触发器,以便在IsEnabled属性为False时更改样式。我选择了您的答案,因为它与我所做的接近。我使用所需的内容定义了不同的样式,并在按钮中添加了触发器,以便在IsEnabled属性为False时更改样式。