![](/img/trans.png)
[英]Changing background color for WPF DataGrid cell depending on selection and value
[英]Datagrid: background colour + disable of selection depending on the cell value - using trigger
关于SOPF上的WPF数据网格有很多问题,但是我仍然要问我的原因,因为我无法从这些数据中得到想要的东西...所以请不要生我的气,尝试通过回答漂亮的问题来帮助我请 :]。
提示:主要问题是: 为什么我的触发器不起作用? :|
是否有一个datagrid属性可以禁止选择没有值的单元格? 我想我知道有类似的东西,但现在找不到。 如果没有这样的事情,您将如何解决呢? 我在考虑selectedCellsChanged或类似事件。 但是我不确定如何解决。
如何根据内部值设置单元格的背景属性? 正在寻找DatagridCell的一些text / content / value属性( http://msdn.microsoft.com/en-us/library/system.windows.controls.datagridcell.aspx ),但对我没有任何帮助...我知道是一些值转换器,但我当时正在考虑使用触发器解决此问题。
一些信息:我已经设置了SelectionMode="Extended"
+ SelectionUnit="Cell"
。
我尝试使用触发器设置背景,但没有成功:
<DataGrid.CellStyle>
<Style TargetType="DataGridCell">
<Style.Triggers>
<Trigger Property="HasContent" Value="False">
<Setter Property="Background" Value="DarkGray"/>
</Trigger>
<Trigger Property="IsSelected" Value="True">
<Setter Property="Background" Value="Red"/>
</Trigger>
</Style.Triggers>
</Style>
</DataGrid.CellStyle>
属性IsSelected
可以正常工作,但是没有内容的东西就不能工作。 只是我在想(错误)“”或null
不存在吗? 还尝试了<Trigger Property="Content" Value="">
和<Trigger Property="Content" Value="null">
,但是这些东西都不希望对我有用。 我怎么了?
编辑:我发现了这个问题- 我如何使用WPF Toolkit Datagrid更改单元格的背景颜色,所以我想我将使用它来处理第二个问题,但是我仍然看不到触发器有什么问题...另外,如果我的触发器有效,我可以通过某种方式将HasContent="False"
为不可选择,如果有这样的话。 但是我只需要进行触发工作即可:D
Edit2:当我设置<Trigger Property="HasContent" Value="True">
它适用于我的所有单元格。所以我猜想它以null /“”作为值。 这让我提出了疑问:
如果我想为null提供特殊背景并禁用它们的选择,应该如何解决?
Edit3:禁用选择应该是这样的: <Setter Property="Focusable" Value="false"/>
由于WPF ListView关闭了选择 ..,所以无效:D:'(
现在,我只需要找出有关单元格null
内容的触发器...有什么提示吗?
我创建一个简单的DataGrid
并尝试找出HasContent
为什么HasContent
返回true
。 我检查Content
属性,它具有TextBlock
。 因此,这可能就是为什么它总是正确的原因。
要解决此问题,您可以修改Trigger
以使用转换器:
<DataTrigger Binding="{Binding DataContext, RelativeSource={RelativeSource Self}, Converter={StaticResource CellConverter}}" Value="False" >
<Setter Property="Background" Value="Green"/>
</DataTrigger>
并在转换器中检查适当的属性是否为null。 要知道应该检查哪个属性转换器,可以使用ConverterParameter
。
这不是一个优雅的解决方案...但是它可以工作;)
这就是我设法最终解决了选择空单元格的问题。 我知道这不是最好的解决方案,但是它对我有用:D感谢此问题: 如何确定DataGrid中所选单元格的值? (WPF)它帮助了:)。
private void mydatagrid_SelectedCellsChanged(object sender, SelectedCellsChangedEventArgs e)
{
foreach (var item in e.AddedCells)
{
var col = item.Column as DataGridColumn;
var fc = col.GetCellContent(item.Item);
if (fc is TextBlock)
{
if (((fc as TextBlock).Text == (""))||((fc as TextBlock).Text == null))
{
mydatagrid.SelectedCells.Remove(item);
fc.Focusable = false; // not sure if neccesarry/working after the previous line
}
}
}
}
有关背景颜色的部分在这里解决: 如何在AutoGeneratingColumn事件期间根据其值设置数据网格单元的背景?
如果您对我的解决方案有任何投诉/改进,请添加评论:)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.