首页 > 解决方案 > WPF:TreeViewItem 数据触发器

问题描述

当所有子 TreeViewItems 的颜色也是灰色时,如何将 TreeViewItem 的颜色更改为灰色?我的代码仅在树第一次初始化时才有效,并且在程序继续工作时不起作用。 图片

代码:

<DataTrigger
    Binding="{Binding RelativeSource={RelativeSource Mode=Self},Converter={vm:TreeViewItemsGrayConverter}}"
    Value="True">
    <Setter
        Property="Foreground"
        Value="Gray" />
</DataTrigger>

转换器:

public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
    var treeViewItems = (TreeViewItem) value;
    if (treeViewItems == null) return false;
    return treeViewItems.Items.Count != 0 && treeViewItems.Items.Cast<TreeViewItem>()
                                                          .All(item => item.Foreground.Equal(Colors.Gray));
}

编辑:目前我还没有找到使用绑定的方法并编写了这样的代码

private bool CheckContainerVisibility(TreeViewItem container)
{
    var grayChild = 0;
    foreach (TreeViewItem item in container.Items)
        if (item.Foreground.Equal(_viewModel.HiddenColor))
            grayChild++;
        else if (!item.Items.IsEmpty)
            if (CheckContainerVisibility(item))
                grayChild++;

    if (container.Items.Count != grayChild) return false;
    container.Foreground = new SolidColorBrush(_viewModel.HiddenColor);
    return true;
}

标签: c#.netwpftreeview

解决方案


推荐阅读