繁体   English   中英

Datagrid:背景颜色+根据单元格值禁用选择-使用触发器

[英]Datagrid: background colour + disable of selection depending on the cell value - using trigger

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

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

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

  2. 如何根据内部值设置单元格的背景属性? 正在寻找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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM