【问题标题】:How to override data grid cells of a specific column in WPF using some property like Name?如何使用名称等属性覆盖 WPF 中特定列的数据网格单元格?
【发布时间】:2021-06-16 18:51:10
【问题描述】:

基本上现在我正在使用列显示索引,但是每次我添加或删除列或更改它们的顺序时都会搞砸。

我不能使用列文本,因为列文本通过绑定具有动态文本,所以我正在查看 x:Name 属性,但我不确定如何在发布的示例代码中使用它。例如,没有 Column.Name。

        <DataGridTemplateColumn Header="S" Width="24" SortMemberPath="Price" x:Name="Price">
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <Ellipse Width="{Binding Balance.SpotBalanceSize}" Height="{Binding Balance.SpotBalanceSize}" Fill="{Binding Path=Balance.SpotBalanceColor}" />
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
        </DataGridTemplateColumn>

        <MultiDataTrigger>
            <MultiDataTrigger.Conditions>
                <Condition Binding="{Binding Column.DisplayIndex, RelativeSource={RelativeSource Self}}" Value="16"/>
            </MultiDataTrigger.Conditions>
            <MultiDataTrigger.Setters>
                <Setter Property="DataGridCell.Background" Value="{Binding Path=PriceChangeHourlyBackColor}" />
                <Setter Property="DataGridCell.Foreground" Value="{Binding Path=PriceChangeHourlyForeColor}" />
            </MultiDataTrigger.Setters>
        </MultiDataTrigger>

【问题讨论】:

    标签: c# .net wpf datagrid styling


    【解决方案1】:

    您可以通过绑定到附加属性来解决它:

    <DataGridTemplateColumn Header="S" Width="24" SortMemberPath="Price" local:AttachedClass.ColName="JoanVenge">
        <DataGridTemplateColumn.CellTemplate>
            <DataTemplate>
                <Ellipse Width="{Binding Balance.SpotBalanceSize}" Height="{Binding Balance.SpotBalanceSize}" Fill="{Binding Path=Balance.SpotBalanceColor}" />
            </DataTemplate>
        </DataGridTemplateColumn.CellTemplate>
    </DataGridTemplateColumn>
    
    <MultiDataTrigger>
        <MultiDataTrigger.Conditions>
            <Condition Binding="{Binding Column.(local:AttachedClass.ColName), RelativeSource={RelativeSource Self}}" Value="JoanVenge"/>
        </MultiDataTrigger.Conditions>
        <MultiDataTrigger.Setters>
            <Setter Property="DataGridCell.Background" Value="{Binding Path=PriceChangeHourlyBackColor}" />
            <Setter Property="DataGridCell.Foreground" Value="{Binding Path=PriceChangeHourlyForeColor}" />
        </MultiDataTrigger.Setters>
    </MultiDataTrigger>
    
    public class AttachedClass
    {
        public static string GetColName(DependencyObject obj)
        {
            return (string)obj.GetValue(ColNameProperty);
        }
    
        public static void SetColName(DependencyObject obj, string value)
        {
            obj.SetValue(ColNameProperty, value);
        }
    
        public static readonly DependencyProperty ColNameProperty = DependencyProperty.RegisterAttached("ColName", typeof(string), typeof(AttachedClass), new PropertyMetadata(""));
    }
    

    【讨论】:

    • 非常感谢它说:“严重性代码描述项目文件行抑制状态错误 XDG0008 名称“AttachedClass”在命名空间“clr-namespace:ProfitTracker”中不存在。ProfitTracker“
    • AttachedClass 是否在 ProfitTracker 命名空间中?
    • 是的,nvm 重建项目确实有效。奇怪的VS在编译前就报错了。
    • 谢谢它很好用。这将使我不必担心每次更新我的代码。
    • 如果您知道如何使用代码访问相同的属性,那么实际上还有最后一件事?所以我可以说如果 ColName == "JoanVenge",这样做?我有一个热键,用于切换某些列的可见性。
    猜你喜欢
    • 1970-01-01
    • 2017-07-07
    • 2020-04-26
    • 1970-01-01
    • 1970-01-01
    • 2014-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多