关于SO的WPF数据网格有很多问题,但是我仍然要问我的原因我无法得到我想要的东西...所以不要生我的气并尝试帮助我通过回答相当愉快:]。
提示:主要问题是:为什么我的触发器不起作用?:|
是否有一个datagrid属性禁止选择没有值的单元?我想我知道有类似的东西,但我现在找不到它。如果没有这样的东西你怎么解决这个问题?我正在考虑关于selectedCellsChanged的事件或类似的事情。但我不确定如何解决这个问题。
如何根据内部值设置单元格的背景属性?正在为DatagridCell(http://msdn.microsoft.com/en-us/library/system.windows.controls.datagridcell.aspx)寻找一些text / content / value属性,但没有任何效果我... 我知道有一些价值转换器,但我正在考虑使用触发器解决这个问题。
一些信息:我已设置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">
,但这些事情只是不想为我工作。我怎么了???
编辑:我发现这个Q / A - How do I change the background color of a cell using WPF Toolkit Datagrid所以我想我会用第二个Q工作,但我仍然没有看到我的触发器有什么问题。 。
此外,如果我的触发器工作,我可以以某种方式设置具有HasContent="False"
的单元格,如果有类似的东西则不可选择。但我只需要让我的扳机工作:D
Edit2:当我设置<Trigger Property="HasContent" Value="True">
时,它适用于我的所有单元格..所以我猜它需要null /“”作为值。这让我有疑问:
如果我想要空值的特殊背景并禁用它们的选择,我该如何解决?
编辑3:禁用所选内容应如下所示:<Setter Property="Focusable" Value="false"/>
感谢WPF ListView turn off selection ..这不起作用:D:'(
现在我只需要解决关于null
单元格内容的触发器...任何提示?
答案 0 :(得分:1)
我创建了一个简单的DataGrid
并尝试找出HasContent
始终返回true
的原因。我检查Content
属性,其中包含TextBlock
。所以这可能就是为什么它总是如此。
要解决此问题,您可以修改Trigger
以使用转换器:
<DataTrigger Binding="{Binding DataContext, RelativeSource={RelativeSource Self}, Converter={StaticResource CellConverter}}" Value="False" >
<Setter Property="Background" Value="Green"/>
</DataTrigger>
在转换器中检查适当的属性if是否为null。要了解应检查哪个属性转换器,您可以使用ConverterParameter
。
这不是一个优雅的解决方案......但它有效;)
答案 1 :(得分:0)
这就是我通过选择空单元格最终解决问题的方法。 我知道这不是最好的解决方案,但它对我有用:D 感谢此问答:How Can Determine Selected Cell's Value In 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
}
}
}
}
有关背景颜色的部分在此解决:How to set background of a datagrid cell during AutoGeneratingColumn event depending on its value?
如果您对我的解决方案有任何抱怨/改进,请添加评论:)。