WPF DataGridTextColumn绑定和样式

时间:2013-11-25 11:38:04

标签: c# wpf xaml datagrid

这是交易:为数据网格设计DataGridTextColumn的文本块样式。 我需要通过比较来自另一个绑定值的文本块来设置文本块的格式。

我想要实现的是这样的:

<Style x:Key="ExpeditionerCellStyle" BasedOn="{StaticResource RightAlignStyle}" TargetType="{x:Type TextBlock}">
    <Style.Triggers>
        <DataTrigger Binding="{Binding Path=BEST}" Value="{RelativeSource Mode=Self}">
            <Setter Property="Background" Value="Green" />
        </DataTrigger>
    </Style.Triggers>
</Style> 

这是不可能的,因为Datatrigger的值不能是相对来源。

所以我尝试使用multibinding

<Style x:Key="ExpeditionerCellStyle" BasedOn="{StaticResource RightAlignStyle}" TargetType="{x:Type TextBlock}">
 <Style.Triggers>
  <DataTrigger Value="True">
    <DataTrigger.Binding>
      <MultiBinding Converter="{StaticResource IsValueEqualParameterConverter}">
        <Binding Path="BEST" />
        <Binding RelativeSource="{RelativeSource Mode=Self}" />
      </MultiBinding>
     </DataTrigger.Binding>
    </DataTrigger>
   </Style.Triggers>
</Style>

没有运气:textblock Text属性为空,可能是因为在执行实际绑定之前应用了样式。

我没有更多的想法。

请帮助我!

3 个答案:

答案 0 :(得分:1)

我不确定这是否有用,但我注意到您忘记在Binding.Path示例中指定MultiConverter ...试试这个:

<Style x:Key="ExpeditionerCellStyle" BasedOn="{StaticResource RightAlignStyle}" TargetType="{x:Type TextBlock}">
    <Style.Triggers>
        <DataTrigger Value="True">
            <DataTrigger.Binding>
                <MultiBinding Converter="{StaticResource IsValueEqualParameterConverter}">
                    <Binding Path="BEST" />
                    <Binding Path="Text" RelativeSource="{RelativeSource Mode=Self}" />
                </MultiBinding>
            </DataTrigger.Binding>
        </DataTrigger>
    </Style.Triggers>
</Style>

答案 1 :(得分:0)

如果您只想根据文本块的内容更改文本块的样式,为什么不只是在文本块背景中添加出价并使用转换器检查文本的内容?

换句话说,将文本和背景绑定到同一个源并使用带背景的转换器,并在转换器中匹配内容并返回正确的背景样式。

如果您需要其他内容,请发表评论,以便我们更好地了解问题所在。

答案 2 :(得分:0)

我结束了修改我的代码。 而不是依赖于单元格的值,在“BEST”字段中,我传递了列的名称。 然后使用转换器我检查 当前文本块(由@Sheridan建议) - &gt; DatagridCell - &gt;列的标题 如果匹配,我会更改此文本块上的样式。

谢谢大家!!!