我不能说我是 WPF 新手,因为这太过分了。我刚刚获得了 WPF 应用程序来维护...
我需要更改 DataGrid
中的特定单元格颜色基于一个值。我以为这很容易,发现SO帖子:Change DataGrid cell colour based on values
.
粘贴到它所属的位置,这给了我以下内容:
<DataGrid x:Name="DgDevices" ItemsSource="{Binding}" BorderThickness="2,0,2,2" Cursor="Cross">
<DataGrid.ContextMenu>
<ContextMenu >
<MenuItem Header="Załóż Deblokadę" Click="InsertDBL" />
<MenuItem Header="Usuń Deblokadę" Click="RemoveDBL"/>
</ContextMenu>
</DataGrid.ContextMenu>
<DataGridTextColumn Binding="{Binding Name}">
<DataGridTextColumn.ElementStyle>
<Style TargetType="{x:Type TextBlock}">
<Style.Triggers>
<Trigger Property="Text" Value="1">
<Setter Property="Background" Value="Black"/>
<Setter Property="Foreground" Value="White"/>
</Trigger>
</Style.Triggers>
</Style>
</DataGridTextColumn.ElementStyle>
</DataGridTextColumn>
</DataGrid>
现在,当调用Show
时在此表单上的方法,它给了我 InvalidOperationException
。我搜索了为什么会发生这种情况的解释,但没有找到明确的解释。
另外,我知道 Binding Name
是我的绑定(bind)的占位符(在 <DataGridTextColumn Binding="{Binding Name}">
中),所以我厌倦了只放置 Binding
那里(受到 ItemsSource="{Binding}"
节点中 DataGrid
的启发),但没有解决问题。
最佳答案
您现在将 DataGridTextColumn
添加到 DataGrid
本身中,而不是添加到其列列表中。直接添加项目和使用 ItemsSource
是互斥的,因此会抛出 InvalidOperationException
(而且您无论如何也不打算将列添加为项目)。相反,这样做:
<DataGrid x:Name="DgDevices"
ItemsSource="{Binding}"
BorderThickness="2,0,2,2"
AutoGenerateColumns="False"
Cursor="Cross">
<DataGrid.ContextMenu>
<ContextMenu >
<MenuItem Header="Załóż Deblokadę" Click="InsertDBL" />
<MenuItem Header="Usuń Deblokadę" Click="RemoveDBL"/>
</ContextMenu>
</DataGrid.ContextMenu>
<DataGrid.Columns> <!-- add to columns -->
<DataGridTextColumn Binding="{Binding Name}">
<DataGridTextColumn.ElementStyle>
<Style TargetType="{x:Type TextBlock}">
<Style.Triggers>
<Trigger Property="Text"
Value="1">
<Setter Property="Background"
Value="Black" />
<Setter Property="Foreground"
Value="White" />
</Trigger>
</Style.Triggers>
</Style>
</DataGridTextColumn.ElementStyle>
</DataGridTextColumn>
</DataGrid.Columns>
</DataGrid>
此外,因为您需要将 AutoGenerateColumns
设置为 False
,否则 DataGrid
会自动从您的数据源生成列,此外您手动定义的列,您很少需要它。
关于c# - 尝试更改 DataGrid 中的单元格颜色时出现 WPF 表单中的 InvalidOperationException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50267674/