【问题标题】:Can't use button property in trigger in WPF无法在 WPF 的触发器中使用按钮属性
【发布时间】:2012-07-31 14:03:16
【问题描述】:

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

我尝试了以下,它没有编译

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

【问题讨论】:

    标签: wpf button triggers


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      这是一种方法:

      <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 时更改样式。
      猜你喜欢
      • 1970-01-01
      • 2013-02-16
      • 2013-04-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多