【问题标题】:Inheriting from DataGridTextColumn and overriding GenerateElement从 DataGridTextColumn 继承并覆盖 GenerateElement
【发布时间】:2023-03-14 21:35:01
【问题描述】:

我正在尝试创建一个自定义 DataGrid,我可以在其中根据单元格值格式化单个单元格(即;红色文本表示负值,绿色表示正值)ala 这种方法......

How to get Binding value of current cell in a WPFToolkit DataGrid

我还需要将值从负数转换为带括号的值(即,-2.34 到 (2.34))。 我有继承/覆盖工作。我的问题是,如何在被覆盖的 GenerateElement 方法中访问单元格中的值。

提前致谢, 菲尔

【问题讨论】:

    标签: wpf datagrid datagridtextcolumn datagridcell


    【解决方案1】:

    我的方法是错误的。我需要使用 IValueConverter 并像这样绑定 Text 和 Foreground 属性...

    type FixedDecimalConverter() =
        interface  IValueConverter with
            member this.Convert(value, targetType, parameter, culture) = 
                match value :?> Double with 
                    | Globals.DataGridHelper.IsNegative x -> 
                        sprintf "(%.2f%%)" (Math.Abs x) :> obj                        
                    | Globals.DataGridHelper.IsPositive x -> 
                        sprintf "%.2f%%" x :> obj
    
            member this.ConvertBack(value, targetType, parameter, culture) = raise <| NotImplementedException()
    
    type ForegroundValueConverter() =
        interface  IValueConverter with
            member this.Convert(value, targetType, parameter, culture) = 
                match value :?> Double with 
                    | Globals.DataGridHelper.IsNegative x -> Globals.DataGridHelper.redBrush :> obj
                    | Globals.DataGridHelper.IsPositive x -> Globals.DataGridHelper.greenBrush :> obj
    
            member this.ConvertBack(value, targetType, parameter, culture) = raise <| NotImplementedException()
    

    还有 Xaml...

    <data:DataGridTemplateColumn Header="YTD v. Sector" x:Name="YTDvSector" Visibility="Collapsed">
                                <data:DataGridTemplateColumn.CellTemplate>
                                    <DataTemplate>
                                        <TextBlock  TextAlignment="Right" VerticalAlignment="Center"
                                                Text="{Binding ytdSectorReturn.value, Converter={StaticResource fcFixedDecimalConverter}}"
                                                Foreground="{Binding ytdSectorReturn.value, Converter={StaticResource fcForegroundValueConverter}}"/>
                                    </DataTemplate>
                                </data:DataGridTemplateColumn.CellTemplate>
                            </data:DataGridTemplateColumn>
    

    还有管道……

    <UserControl.Resources>
            <y:FixedDecimalConverter x:Key="fcFixedDecimalConverter" />
            <y:ForegroundValueConverter x:Key="fcForegroundValueConverter" />
        </UserControl.Resources>
    

    【讨论】:

      猜你喜欢
      • 2011-11-06
      • 2019-06-29
      • 1970-01-01
      • 1970-01-01
      • 2013-12-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多