Wpf DataGrid RowStyle 如何使用图像或画笔作为背景

Posted

技术标签:

【中文标题】Wpf DataGrid RowStyle 如何使用图像或画笔作为背景【英文标题】:Wpf DataGrid RowStyle How use either Image or Brush for Background 【发布时间】:2016-07-27 10:15:13 【问题描述】:

我在 xaml 中以 DataGrid 为目标的样式中定义了一个 RowStyle:

<Style x:Key="DataGridStyle" TargetType="x:Type DataGrid">
<!-- Bunch of other setters -->
<Setter Property="RowStyle">
    <Setter.Value>
        <Style TargetType="x:Type DataGridRow">
            <Setter Property="Background">
                <Setter.Value>
                    <MultiBinding Converter="StaticResource DataGridRowBgConverter">
                        <Binding Path="IsThis" />
                        <Binding Path="IsThat" />
                    </MultiBinding>
                </Setter.Value>
            </Setter>
        </Style>
    </Setter.Value>
</Setter>

某些 DataGrid 需要使用图像作为背景的 RowStyle,以便在某个属性为 true 时显示。 我修改了多重绑定以将数据上下文作为第三个值传递,并修改了转换器以检查 DC 以确定是否需要图像。 不过,我不知道如何构建 xaml。 更新: 这似乎工作,除了设置双向绑定,我需要指定一个路径。

  <Setter Property="Background">
      <Setter.Value>
        <ImageBrush Binding="Binding Converter=StaticResource DataGridRowImageConverter"  />
      </Setter.Value>
  </Setter>

如何设置绑定路径以绑定到 DC(相当于&lt;Binding /&gt;)?上面 xaml 中的绑定给了我必要的 DC;如何使用 Path 表达相同的内容? 感谢您的任何见解....

【问题讨论】:

【参考方案1】:

同一属性不能有超过 1 个 setter。您可以在样式上使用 DataTrigger 根据 DataContext 中的属性将背景设置为 ImageBrush。它看起来像下面这样:

<Style x:Key="DataGridStyle" TargetType="x:Type DataGrid">
    <!-- Bunch of other setters -->
    <Setter Property="RowStyle">
    <Setter.Value>
        <Style TargetType="x:Type DataGridRow">
            <Setter Property="Background">
                <Setter.Value>
                    <MultiBinding Converter="StaticResource DataGridRowBgConverter">
                        <Binding Path="IsThis" />
                        <Binding Path="IsThat" />
                    </MultiBinding>
                </Setter.Value>
            </Setter>
        </Style>
    </Setter.Value>
    <Style.Triggers>
        <DataTrigger Binding="Binding Path=PropertyToIndicateImageBackground" Value="True">
            <Setter Property="Background">
                <ImageBrush ImageSource="YourImage.jpg"/> 
            </Setter>
        </DataTrigger>
    </Style.Triggers>
</Style>

【讨论】:

感谢您的回复。在创建数据网格之前,我们不知道将触发使用图像的属性名称,也不知道 imageSource。在您的示例中,DataTrigger 可以绑定到 DC 吗?我会尝试一下... 您应该能够绑定到 DC。然后,您需要一个转换器在 DataTrigger 的绑定上返回 true/false

以上是关于Wpf DataGrid RowStyle 如何使用图像或画笔作为背景的主要内容,如果未能解决你的问题,请参考以下文章

所选行的 WPF DataGrid RowStyle 不改变背景和前景色

Wpf 后台代码 怎么设置datagrid 某一行的背景色

wpf datagrid 样式怎么设置默认选中行的颜色

DataGrid.RowStyle 仅适用于初始绑定

如何使 WPF DataGrid 显示具有绑定和 DataTemplate 的 ViewModel 集合

DataGrid RowStyle - DataTrigger 中的绑定值