在WPF中不能在触发器中使用button属性

时间:2012-07-31 14:03:16

标签: wpf button triggers

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

我尝试了以下内容并且无法编译

  

错误:'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>

2 个答案:

答案 0 :(得分:2)

IsEnabled是一个DependecyProperty,它是在Button继承的类上定义的; XAML要求您明确指定拥有类型。请改为Trigger Property="UIElement.IsEnabled"

答案 1 :(得分:0)

这是一种方法:

<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仅适用于样式,因此我们需要定位接收样式但绑定到控件中另一个元素的实际元素。