【问题标题】:WPF: How do I set the Foreground property of a TextBlock using DataTriggerWPF:如何使用 DataTrigger 设置 TextBlock 的 Foreground 属性
【发布时间】:2011-01-09 19:31:30
【问题描述】:

这是我的 XAML:

<TextBlock Name="SeverityText"
           Grid.Column="1"
           Grid.Row="0"
           Foreground="Red">
    <TextBlock.Triggers>

        <DataTrigger Binding="{Binding Path=Severity}">
            <DataTrigger.Value>
                <sm:Severity>Warning</sm:Severity>
            </DataTrigger.Value>
            <Setter TargetName="SeverityText"
                    Property="Foreground"
                    Value="Yellow" />
        </DataTrigger>
                 <DataTrigger Binding="{Binding Path=Severity}">
            <DataTrigger.Value>
                <sm:Severity>Information</sm:Severity>
            </DataTrigger.Value>
            <Setter TargetName="SeverityText"
                    Property="Foreground"
                    Value="White" />
        </DataTrigger>


    </TextBlock.Triggers>
    <TextBlock>Severity:</TextBlock>
    <TextBlock Text="{Binding Path=Severity}" />
</TextBlock>

这是我的错误信息:

在“ContentPresenter”类型上找不到静态成员“ForegroundProperty”。

sm:Severity 是我导入的枚举。

【问题讨论】:

    标签: wpf textblock datatrigger foreground


    【解决方案1】:

    编写属性的完整路径也可以:
    所以

    Property="Foreground" -> Property="TextBlock.Foreground"

    但是,正如上一个答案中所建议的,您会得到:

    System.InvalidOperationException:触发器集合成员必须是 EventTrigger 类型。


    ...如果你不把它放在一个风格中。

    【讨论】:

      【解决方案2】:

      您的触发器和设置器需要在样式中定义,而不是直接在 TextBlock 上:

      <TextBlock>
          <TextBlock.Style>
              <Style TargetType="TextBlock">
                  <Style.Triggers>
      
                     <DataTrigger Binding="{Binding Severity}"> 
                         <DataTrigger.Value> 
                             <sm:Severity>Warning</sm:Severity> 
                         </DataTrigger.Value> 
                         <Setter TargetName="SeverityText" 
                                 Property="Foreground" 
                                 Value="Yellow" /> 
                     </DataTrigger>
      
                  </Style.Triggers>
              </Style>
          </TextBlock.Style>
      </TextBlock>
      

      【讨论】:

      • 好的,那么样式块之外的触发器有什么用?
      • @Jonathan 我自己用的不多,但我相信控件上的 Triggers 直接是用于事件触发的,比如捕捉鼠标事件等。
      猜你喜欢
      • 2011-05-05
      • 2012-01-12
      • 2011-06-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多