gpt4 book ai didi

基于数据类型的WPF设置样式?

转载 作者:行者123 更新时间:2023-12-04 17:59:13 24 4
gpt4 key购买 nike

这就是问题所在。我正在将 TreeView 与几种不同类型的对象绑定(bind)。每个对象都是一个节点,有些对象有一个名为 IsNodeExpanded 的属性,当然有些则没有。这是我的风格:

<Style TargetType="{x:Type TreeViewItem}">
<Setter Property="IsExpanded" Value="{Binding IsNodeExpanded, Mode=TwoWay}" />
</Style>

现在,问题是当绑定(bind)没有这个属性的项目时,我们在输出中得到这个错误:
System.Windows.Data Error: 39 : BindingExpression path error: 'IsNodeExpanded' property not found on 'object' ''CompensationChannel' (HashCode=56992474)'. BindingExpression:Path=IsNodeExpanded; DataItem='CompensationChannel' (HashCode=56992474); target element is 'TreeViewItem' (Name=''); target property is 'IsExpanded' (type 'Boolean')

当然,我们得到了很多次。所以我试图想出一种方法来根据它拥有的 DataType 切换 TreeViewItem 的样式。关于如何做到这一点的任何想法?

一些信息:我不能为每个项目手动执行,因为我不是在 XAML 中创建它们,它们是从数据源动态创建的。

编辑:我发现 this answer但这对我不起作用。

最佳答案

尝试使用 TreeView.ItemContainerStyleSelector带有自定义属性的 StyleSelector根据绑定(bind)对象是否具有该属性来更改样式的类。

public class TreeItemStyleSelector : StyleSelector
{
public Style HasExpandedItemStyle { get; set; }
public Style NoExpandedItemStyle { get; set; }

public override Style SelectStyle(object item, DependencyObject container)
{
// Choose your test
bool hasExpandedProperty = item.GetType().GetProperty("IsExpanded") != null;

return hasExpandedProperty
? HasExpandedItemStyle
: NoExpandedItemStyle;
}
}

在 XAML 资源中:
<Style x:Key="IsExpandedStyle" TargetType="{x:Type TreeViewItem}">
<Setter Property="IsExpanded" Value="{Binding IsNodeExpanded, Mode=TwoWay}" />
</Style>

<Style x:Key="NoExpandedStyle" TargetType="{x:Type TreeViewItem}">
</Style>

<x:TreeViewItemStyleSelector x:Key="TreeViewItemStyleSelector"
HasExpandedItemStyle="{StaticResource IsExpandedStyle}"
NoExpandedItemStyle="{StaticResource NoExpandedStyle}" />

在 XAML 中:
<TreeView ItemsSource="{Binding ...}"
ItemContainerStyleSelector="{StaticResource TreeItemStyleSelector}">

关于基于数据类型的WPF设置样式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1983428/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com