Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# XAML中不同属性的WPF DataGrid单元格样式_C#_Wpf_Xaml - Fatal编程技术网

C# XAML中不同属性的WPF DataGrid单元格样式

C# XAML中不同属性的WPF DataGrid单元格样式,c#,wpf,xaml,C#,Wpf,Xaml,是否可以将数据网格列值绑定到ItemsSource中指定的绑定类的一个属性,但引用该类中的其他属性来设置单元格样式 下面是一个代码示例: <DataGrid ItemsSource="MyCollection"> <DataGridTextColumn Header="MyColumn" Binding={Binding ColumnText} /> <DataGridTextColumn Header="MyColumn2" Binding={Bindin

是否可以将数据网格列值绑定到ItemsSource中指定的绑定类的一个属性,但引用该类中的其他属性来设置单元格样式

下面是一个代码示例:

<DataGrid ItemsSource="MyCollection">
  <DataGridTextColumn Header="MyColumn" Binding={Binding ColumnText} />
  <DataGridTextColumn Header="MyColumn2" Binding={Binding ColumnText2} />
</DataGrid>

假设我在MyCollection中的对象中还有两个属性(枚举或画笔),我想引用它们来设置相应单元格的背景颜色;这能做到吗

编辑-我需要对多个列执行此操作,每个列查看不同的属性,以确定它应该是什么颜色;我在上面的代码示例中添加了第二列

我知道我可以根据ColumnText中的值设置样式,但这不是我需要做的

我已经尝试设置样式数据触发器,但是当我尝试绑定时,我只能绑定到整个数据上下文中的某个内容,而不能绑定到填充当前行的对象中的另一个属性


非常感谢

如果我理解正确,您正试图通过行模型中的属性设置单元格背景

可以通过设置单元格样式来实现这一点,并将DataTrigger设置为该样式以绑定到所需的属性


例子 您希望将编号为3的每个单元格绘制为绿色:

<DataGrid ItemsSource="{Binding Rows}" AutoGenerateColumns="True">
    <DataGrid.CellStyle>
        <Style TargetType="{x:Type DataGridCell}">
            <Style.Triggers>
                <DataTrigger Binding="{Binding Number}" Value="3">
                    <Setter Property="Background">
                        <Setter.Value>
                            <SolidColorBrush Color="Green"/>
                        </Setter.Value>
                    </Setter>
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </DataGrid.CellStyle>
</DataGrid>

当然,您可以使用自己的属性和感兴趣的值更改Number属性

如果你想做一些更复杂的事情,比如值的范围等等,你应该用传统的方法


编辑 如果要为每列创建不同的单元格样式,应显式设置列:

<DataGrid ItemsSource="{Binding Rows}" AutoGenerateColumns="False">
    <DataGrid.Columns>
        <DataGridTextColumn Binding="{Binding Number}">
            <DataGridTextColumn.CellStyle>
                <Style TargetType="{x:Type DataGridCell}">
                    <Style.Triggers>
                        <DataTrigger Binding="{Binding Number}" Value="3">
                            <Setter Property="Background">
                                <Setter.Value>
                                    <SolidColorBrush Color="Green"/>
                                </Setter.Value>
                            </Setter>
                        </DataTrigger>
                    </Style.Triggers>
                </Style>
            </DataGridTextColumn.CellStyle>
        </DataGridTextColumn>
    </DataGrid.Columns>
</DataGrid>

但有一件重要的事情需要注意


您必须设置AutoGenerateColumns=“False”,否则将生成两次列。

感谢您的回复!我意识到我的问题还不清楚,我需要在多个列中执行此操作,每个列引用不同的属性来设置其颜色。我尝试了您的示例,在数据触发器中,我无法绑定到该行的属性,仅适用于外部数据上下文对象的属性。我已将答案添加为显式列感谢更新!不过,我得到了和以前一样的问题。在DataTrigger中,我只能绑定到外部数据上下文的属性(在整个XAML中都可用的viewmodel),而不能绑定到行的另一个属性。但别担心,我认为这是VisualStudio的一个bug或者类似的东西。请随意输入您的财产名称,编译,然后让神奇的事情发生。:)