Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/325.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/4/wpf/13.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#,WPF)设置数据网格单元格背景_C#_Wpf_Xaml_Datagrid - Fatal编程技术网

基于数据网格单元格背景的值(C#,WPF)设置数据网格单元格背景

基于数据网格单元格背景的值(C#,WPF)设置数据网格单元格背景,c#,wpf,xaml,datagrid,C#,Wpf,Xaml,Datagrid,(围绕这个话题也有类似的问题,但没有一个与我的回答方式相匹配。) 我想根据数据网格中每个单元格的值(从0到3的整数)更改它们的颜色。 目前,我可以通过鼠标移动来改变单元格的颜色,使用以下方法: <DataGrid Name="mapDisplay" ItemsSource="{Binding}" Margin="0,59,10,0"> <DataGrid.CellStyle> <Style Ta

(围绕这个话题也有类似的问题,但没有一个与我的回答方式相匹配。)

我想根据数据网格中每个单元格的值(从0到3的整数)更改它们的颜色。 目前,我可以通过鼠标移动来改变单元格的颜色,使用以下方法:

        <DataGrid Name="mapDisplay" ItemsSource="{Binding}" Margin="0,59,10,0">
            <DataGrid.CellStyle>
                <Style TargetType="DataGridCell">
                    <Style.Triggers>
                        <Trigger Property="IsMouseOver" Value="True">
                            <Setter Property="Background" Value="Red" />
                        </Trigger>
                    </Style.Triggers>
                </Style>
            </DataGrid.CellStyle>
        </DataGrid>

此代码将鼠标悬停在单元格上的任何内容更改为“红色”。但是如何根据颜色的值来改变颜色呢?

请参考此答案

我用下面的代码尝试了答案中描述的相同方法,效果很好

<Window.Resources>        
        <local:ColorConverter x:Key="NameToBrushConverter"/>
 </Window.Resources>

    <Grid>
        <DataGrid ItemsSource="{Binding SampleList}"  AutoGenerateColumns="False">
            <DataGrid.Columns>
                <!-- Inputs -->
                <DataGridTextColumn Width="SizeToCells" Header="Inputs" MinWidth="100" Binding="{Binding RowNum}" >                  

                    <DataGridTextColumn.ElementStyle>
                        <Style TargetType="{x:Type TextBlock}">
                            <Setter Property="Background" Value="{Binding RowNum, Converter={StaticResource NameToBrushConverter}}"/>
                        </Style>
                    </DataGridTextColumn.ElementStyle>

                </DataGridTextColumn>
            </DataGrid.Columns>
        </DataGrid>
    </Grid>
希望这有帮助。

请参考此答案

我用下面的代码尝试了答案中描述的相同方法,效果很好

<Window.Resources>        
        <local:ColorConverter x:Key="NameToBrushConverter"/>
 </Window.Resources>

    <Grid>
        <DataGrid ItemsSource="{Binding SampleList}"  AutoGenerateColumns="False">
            <DataGrid.Columns>
                <!-- Inputs -->
                <DataGridTextColumn Width="SizeToCells" Header="Inputs" MinWidth="100" Binding="{Binding RowNum}" >                  

                    <DataGridTextColumn.ElementStyle>
                        <Style TargetType="{x:Type TextBlock}">
                            <Setter Property="Background" Value="{Binding RowNum, Converter={StaticResource NameToBrushConverter}}"/>
                        </Style>
                    </DataGridTextColumn.ElementStyle>

                </DataGridTextColumn>
            </DataGrid.Columns>
        </DataGrid>
    </Grid>

希望这有帮助。

如果您的值范围有限,您可以使用下面的apparoach在XAML中完成。下面的代码假定您的属性名为
Status:int
,您只想更改包含的单元格,而不是整行。除了
DisplayIndex
,您还可以使用
标题
属性来使用
名称

  <DataGrid x:Name="Dgrd">
        <DataGrid.CellStyle>
            <Style TargetType="DataGridCell">
                <Style.Triggers>
                    <MultiDataTrigger>
                        <MultiDataTrigger.Conditions>
                            <Condition Binding="{Binding Status}" Value="0"/>
                            <Condition Binding="{Binding Column.DisplayIndex,RelativeSource={RelativeSource Self}}" Value="1"/>
                        </MultiDataTrigger.Conditions>
                        <Setter Property="Background" Value="Blue"/>
                    </MultiDataTrigger>
                    <MultiDataTrigger>
                        <MultiDataTrigger.Conditions>
                            <Condition Binding="{Binding Status}" Value="1"/>
                            <Condition Binding="{Binding Column.DisplayIndex,RelativeSource={RelativeSource Self}}" Value="1"/>
                        </MultiDataTrigger.Conditions>
                        <Setter Property="Background" Value="Red"/>
                    </MultiDataTrigger>
                    <MultiDataTrigger>
                        <MultiDataTrigger.Conditions>
                            <Condition Binding="{Binding Status}" Value="2"/>
                            <Condition Binding="{Binding Column.DisplayIndex,RelativeSource={RelativeSource Self}}" Value="1"/>
                        </MultiDataTrigger.Conditions>
                        <Setter Property="Background" Value="Yellow"/>
                    </MultiDataTrigger>
                    <MultiDataTrigger>
                        <MultiDataTrigger.Conditions>
                            <Condition Binding="{Binding Status}" Value="3"/>
                            <Condition Binding="{Binding Column.DisplayIndex,RelativeSource={RelativeSource Self}}" Value="1"/>
                        </MultiDataTrigger.Conditions>
                        <Setter Property="Background" Value="Olive"/>
                    </MultiDataTrigger>
                </Style.Triggers>
            </Style>
        </DataGrid.CellStyle>
    </DataGrid>


您还可以使用
转换器

如果您的值范围是有限的,您可以使用下面的apparoach在XAML中进行转换。下面的代码假定您的属性名为
Status:int
,您只想更改包含的单元格,而不是整行。除了
DisplayIndex
,您还可以使用
标题
属性来使用
名称

  <DataGrid x:Name="Dgrd">
        <DataGrid.CellStyle>
            <Style TargetType="DataGridCell">
                <Style.Triggers>
                    <MultiDataTrigger>
                        <MultiDataTrigger.Conditions>
                            <Condition Binding="{Binding Status}" Value="0"/>
                            <Condition Binding="{Binding Column.DisplayIndex,RelativeSource={RelativeSource Self}}" Value="1"/>
                        </MultiDataTrigger.Conditions>
                        <Setter Property="Background" Value="Blue"/>
                    </MultiDataTrigger>
                    <MultiDataTrigger>
                        <MultiDataTrigger.Conditions>
                            <Condition Binding="{Binding Status}" Value="1"/>
                            <Condition Binding="{Binding Column.DisplayIndex,RelativeSource={RelativeSource Self}}" Value="1"/>
                        </MultiDataTrigger.Conditions>
                        <Setter Property="Background" Value="Red"/>
                    </MultiDataTrigger>
                    <MultiDataTrigger>
                        <MultiDataTrigger.Conditions>
                            <Condition Binding="{Binding Status}" Value="2"/>
                            <Condition Binding="{Binding Column.DisplayIndex,RelativeSource={RelativeSource Self}}" Value="1"/>
                        </MultiDataTrigger.Conditions>
                        <Setter Property="Background" Value="Yellow"/>
                    </MultiDataTrigger>
                    <MultiDataTrigger>
                        <MultiDataTrigger.Conditions>
                            <Condition Binding="{Binding Status}" Value="3"/>
                            <Condition Binding="{Binding Column.DisplayIndex,RelativeSource={RelativeSource Self}}" Value="1"/>
                        </MultiDataTrigger.Conditions>
                        <Setter Property="Background" Value="Olive"/>
                    </MultiDataTrigger>
                </Style.Triggers>
            </Style>
        </DataGrid.CellStyle>
    </DataGrid>


您也可以使用
转换器

您的方法似乎并不完全适合我。然而,我确实使用了这个部分来绑定DataTriger:
Column.DisplayIndex,RelativeSource={RelativeSource Self}
这似乎用正确的值选择了结果的整个列,并更改了背景,这比我之前更接近。是否可以使其仅更改具有正确值的单元格的背景?@PL200当前仅更改一个单元格,而不是整个列/行。因此“状态”将是列标题,是吗?是否有办法对所有列执行此操作?@PL200而不是
Column.DisplayIndex
使用
Column.Header
并使用状态作为
Value
进行比较。您的方法似乎对我并不完全有效。然而,我确实使用了这个部分来绑定DataTriger:
Column.DisplayIndex,RelativeSource={RelativeSource Self}
这似乎用正确的值选择了结果的整个列,并更改了背景,这比我之前更接近。是否可以使其仅更改具有正确值的单元格的背景?@PL200当前仅更改一个单元格,而不是整个列/行。因此“状态”将是列标题,是吗?是否有办法对所有列执行此操作?@PL200而不是
Column.DisplayIndex
使用
Column.Header
并使用状态作为
Value
进行比较。