1

关于 SO 上有很多关于 WPF 数据网格的问题,但我仍然要问我的问题,因为我无法从这些问题中得到我想要的东西......所以不要生我的气,试着通过回答漂亮来帮助我请 :]。

提示:主要问题是:为什么我的触发器不起作用?:|

  1. 是否有一个 datagrid 属性禁用选择没有值的单元格?我想我知道有类似的东西,但我现在找不到。如果没有这样的事情,你将如何解决这个事情?我正在考虑 selectedCellsChanged 上的事件或类似的事件。但我不确定如何解决。

  2. 如何根据里面的值设置单元格的背景属性?正在寻找 DatagridCell 的一些文本/内容/值属性(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="">and <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/"" 作为一个值。这让我有疑问:

如果我想要空值的特殊背景并禁用它们的选择,我应该如何解决这个问题?

Edit3:禁用选择应该像这样工作:<Setter Property="Focusable" Value="false"/>感谢WPF ListView 关闭选择..这不起作用 :D :'(

现在我只需要找出关于null单元格内容的触发器......有什么提示吗?

4

2 回答 2

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>

如果为空,则在转换器中检查适当的属性。要知道应该检查哪个属性转换器,您可以使用ConverterParameter.

这不是一个优雅的解决方案......但它有效;)

于 2013-05-19T19:04:06.180 回答
0

这就是我最终解决选择空单元格问题的方法。我知道这不是最好的解决方案,但它对我有用 :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 事件期间根据其值设置数据网格单元格的背景?

如果您对我的解决方案有任何投诉/改进,请添加评论:)。

于 2013-05-21T15:20:15.557 回答