c# - 尝试更改 DataGrid 中的单元格颜色时,WPF 表单中的 InvalidOperationException
问题描述
我不能说我是 WPF 的新手,因为它太多了。我刚刚获得了 WPF 应用程序来维护...
我需要DataGrid
根据一个值更改特定的单元格颜色。我认为这很容易,发现 SO post: Change DataGrid cell color 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
是我绑定的占位符(in <DataGridTextColumn Binding="{Binding Name}">
),所以我厌倦了放在Binding
那里(受ItemsSource="{Binding}"
inDataGrid
节点的启发),但没有解决问题。
解决方案
您现在正在添加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
将自动从您的数据源生成列,除了您手动定义的列之外,您很少需要它。
推荐阅读
- templates - 推导成员函数的参数列表
- javascript - imageminJpegTran 插件旋转图像
- python - Numpy 将 txt 文件导入为没有文本行的矩阵
- c++ - 重新启动时凭据提供程序的奇怪结果
- javascript - Orderline 正在表管理中重新初始化
- react-native - 使自定义按钮出现在 React Native 导航栏的顶部
- camera - 将高清数码相机视图流式传输到视频/FPV 护目镜
- python - Groupby 并仅计算在特定时间点调用客户的次数
- javascript - 如何使用 forEach 从数组创建新数组
- java - BiConsumer 异常测试