代码之家  ›  专栏  ›  技术社区  ›  renaldogg

有条件地转换行样式值

  •  0
  • renaldogg  · 技术社区  · 7 年前

    所以我不知道这是否真的有可能,但值得一试。我有两个不同的 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值我想使用两种样式中的一种,这取决于我使用的“自定义主题”。

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

    <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 回复  |  直到 7 年前
        1
  •  1
  •   Clemens    7 年前

    前提是 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>
    

    转换器将通过 value Convert方法的参数:

    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;
    }