У меня есть TreeView
, что я хочу добавить два разных типа узлов, каждый из которых имеет свой собственный HierachicalDataTemplate
. У меня есть эта работа (Code Below)Изменение HeaderTemplate в древовидной структуре на IsSelected с несколькими иерархическими параметрами для разных типов
Что я хочу, когда выбран какой-либо узел в дереве, я хочу, чтобы шаблон изменялся для этого узла, с другим шаблоном для узлов BoolNode и другим шаблоном для CompareNodes , Я нашел несколько примеров, используя Styles и Trigger
s, но они все для TreeView
, где все узлы имеют один и тот же шаблон.
TreeView Xaml:
<TreeView Name="m_kTest">
<TreeView.Resources>
<HierarchicalDataTemplate DataType="{x:Type self:BoolNode}" ItemsSource="{Binding Children}">
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding OpText}"/>
</StackPanel>
</HierarchicalDataTemplate>
<HierarchicalDataTemplate DataType="{x:Type self:CompareNode}">
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding Header}"/>
<TextBlock Text=" "/>
<TextBlock Text="{Binding OpText}"/>
<TextBlock Text=" "/>
<TextBlock Text="{Binding Value}"/>
</StackPanel>
</HierarchicalDataTemplate>
</TreeView.Resources>
</TreeView>
IQueryNode:
public interface IQueryNode
{
ObservableCollection<IQueryNode> Children { get; }
int OpIndex { get; set; }
String OpText{get;}
}
BoolNode:
public class BoolNode :IQueryNode
{
public int OpIndex { get; set; }
public String OpText { get { ... } }
public ObservableCollection<IQueryNode> Children { get; private set; }
public BoolNode()
{
Children = new ObservableCollection<IQueryNode>();
}
}
CompareNode:
public class CompareNode: IQueryNode
{
public ObservableCollection<IQueryNode> Children { get; private set; }
public int OpIndex { get; set; }
public String OpText {get {...} }
public String Header { get; set; }
public String Value { get; set; }
public CompareNode()
{
Children = new ObservableCollection<IQueryNode>();
}
}
Почему вы не используете 'ObservableCollection' и не помещаете в него объекты' BoolNode' и 'CompareNode'? –
Это то, что я делаю для построения набора данных. Всегда будет один корневой узел, а затем любое число узлов-предков. У меня есть основной дисплей элементов, работающих с их различными HierarchicalDataTemplates, применяемыми к каждому типу узла. Это изменение шаблона на IsSelected, которое меня озадачило. – user1958698