有条件地转换 RowStyle 值

Posted

技术标签:

【中文标题】有条件地转换 RowStyle 值【英文标题】:Converting RowStyle values Conditionally 【发布时间】:2018-08-20 09:20:39 【问题描述】:

所以我不知道这是否真的可能,但值得一试。我有两个不同的DatagridRowStyles 有条件地设置在DataGridBaseStyle 中。

例如:

      <Style x:Key="DataGridBaseStyle"
                   TargetType="sdk:DataGrid">
                <Setter Property="CellStyle" Value="StaticResource DataGridCellBaseStyle" />
                <Setter Property="ColumnHeaderStyle" Value="StaticResource DataGridColumnHeaderBaseStyle" />
                <Setter Property="RowHeaderStyle" Value="StaticResource DataGridRowHeaderBaseStyle" />
                <Setter Property="RowStyle" Value="StaticResource DataGridRowBaseStyle />
...

RowStyle 的属性设置器值我想使用两种样式之一,具体取决于我使用的“自定义主题”。

到目前为止,我尝试过这样设置,但它只默认为普通样式。

<Setter Property="RowStyle">
        <Setter.Value>
            <Binding>
                <Binding.Converter>
                    <conv:DataGridRowStyleConverter/>
                </Binding.Converter>
            </Binding>
        </Setter.Value>
    </Setter>

也一样

<Setter Property="RowStyle" Value="StaticResource DataGridRowBaseStyle Converter=StaticResource DataGridRowStyleConverter" />

转换器编码

public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    

        if (ColourScheme == "Dark")
            return Application.Current.Resources["DataGridRowBaseDarkStyle"] as Style;

        return Application.Current.Resources["DataGridRowBaseStyle"] as Style;
    

我有点认为我的转换器返回值不正确,但我也确实在没有运气的情况下使用了这些值。

【问题讨论】:

我认为,您的转换方法代码不正确。您应该检查 Convert() 方法的 value 参数,方法是将其类型转换为 DataGridRowBaseStyle 而不是 ColourScheme。 【参考方案1】:

假设ColorScheme是当前DataContext中的一个公共属性,那么Setter应该是这样的:

<Setter Property="RowStyle"
    Value="Binding ColorScheme, Converter=StaticResource DataGridRowStyleConverter"/>

或者像这样在 XML 标记语法中:

<Setter Property="RowStyle">
    <Setter.Value>
        <Binding Path="ColorScheme"
                 Converter="StaticResource DataGridRowStyleConverter"/>
    </Setter.Value>
</Setter>

Converter 将通过 Convert 方法的 value 参数获取 ColorScheme 的当前值:

public object Convert(
    object value, Type targetType, object parameter, CultureInfo culture)

    return value.ToString == "Dark"
        ? Application.Current.Resources["DataGridRowBaseDarkStyle"] as Style
        : Application.Current.Resources["DataGridRowBaseStyle"] as Style;

【讨论】:

否 ColorScheme 属性不公开。但我看到你在那里做了什么,唯一的问题是将属性值设置为正确的样式。即使我返回正确的样式,它也会使用 Silverlight 的基本默认样式。@Clemens

以上是关于有条件地转换 RowStyle 值的主要内容,如果未能解决你的问题,请参考以下文章

DataGrid.RowStyle 仅适用于初始绑定

“StaticResource dxgt:GridRowThemeKey ResourceKey=RowStyle”的代码背后是啥

WPF datagrid.rowstyle 绑定

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

PrimeFaces DataTable:例如,如何使用 var="item" 作为获取 rowStyle 的变量?

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