c# - 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;
}
解决方案
推荐阅读
- ios - 我们可以在 Swift 上重用 struct 吗?或者还有其他方法吗?
- pdf-generation - Ghostscript : ps to pdf - 保持方向
- javascript - 使用 progressbar.js 在我的进度圈上添加限制栏
- tfs - TFS 2018 代码搜索
- node.js - Mongoose 查找设置,例如。如果位置是全部显示所有结果不是位置:“全部”
- python - 用于组合异步迭代器的映射、过滤器和迭代工具
- html - 在 ionic 的 html 标签中使用未定义的属性
- mysql - 使用 mysql 数据通过 Elasticsearch 实现搜索
- websocket - Web 套接字和动态 CRM
- xamarin - 以 xamarin 形式获取日期和时间