我还在努力处理单元格背景的操作,因此我想问一个新问题。
用户“H.B.”写道,我可以在AutoGeneratingColumn事件期间设置单元格样式-根据值更改DataGrid单元格颜色。问题是我不确定该如何做。
我想要的:
根据单元格的值设置不同的背景颜色。如果值为null
,我也希望它不能被点击(我猜可能是无法聚焦的)。
我有什么/我正在尝试做什么:
private void mydatagrid_AutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e)
{
foreach (Cell cell in e.Column)
{
if (cell.Value < 1)
{
cell.Background = Color.Black;
cell.isFocusable = false;
}
else
{
cell.Background = Color.Pink;
}
}
}
这只是伪代码。类似这样的操作在列自动生成期间是否可行,如果可以,我该如何编辑我的代码使其有效?
我了解到值转换器,但我想知道是否可以通过编程方式实现,而不必编写XAML。
请理解我还是C#/WPF/DataGrid的新手。
解决方案第一部分:
我使用了我接受的答案。只需将它放入
<Window.Resources>
<local:ValueColorConverter x:Key="colorConverter"/>
<Style x:Key="DataGridCellStyle1" TargetType="{x:Type DataGridCell}">
<Setter Property="Padding" Value="5"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type DataGridCell}">
<Border Padding="{TemplateBinding Padding}" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" SnapsToDevicePixels="True">
<Border.Background>
<MultiBinding Converter="{StaticResource colorConverter}">
<Binding RelativeSource="{RelativeSource AncestorType=DataGridCell}" Path="Content.Text"/>
<Binding RelativeSource="{RelativeSource AncestorType=DataGridCell}" Path="IsSelected"/>
</MultiBinding>
</Border.Background>
<ContentPresenter SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</Window.Resources>
并创建了一个 MultiBinding
转换器,这样我就可以为选定的单元格设置背景颜色。
问题:
现在我只需要解决设置空单元格焦点的问题。有什么提示吗?
<Style.Triggers>
<Trigger Property="HasContent" Value="False">
<Setter Property="Focusable" Value="False"/>
</Trigger>
</Style.Triggers>
这不起作用。我在空单元格中有空字符串,但现在它们被填充了 ´null´ ,所以应该可以工作,对吧?或者我做错了什么 :| ?
解决方案第二部分:
所以上面的代码只要单元格值是一个 ´TextBox´ 就不会工作,所以我决定找到另一种处理方法,可以在我的答案中找到:https://stackoverflow.com/a/16673602/2296407
感谢你试图帮助我 :)