转换RowStyle值有条件地

时间:2018-03-12 11:12:13

标签: c# wpf xaml silverlight datagrid

所以我不知道这是否真的可行,但值得一试。我有两个不同的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;
    }

我有点认为我的转换器返回值不正确,但我也确实玩过那些没有运气的值。

1 个答案:

答案 0 :(得分: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>

转换器将通过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;
}