我遇到的问题是,TreeView Controltemplate的某些部分需要根据绑定(ItemsSource)ViewModel的状态进行更改。例如,小扩展器图标需要基于每个项目ViewModel状态与不同的绘图交换。另外,根据每个ViewModel的状态,子项需要水平排列而不是垂直排列。
答案 0 :(得分:1)
听起来你必须自定义ItemsContainerStyle,而不是自定义ControlTemplate。例如,如果要在选择基础ViewModel时将TreeViewItem标记为已选中,则可以使用以下样式:
<TreeView ItemsSource="{Binding ...}
...>
<TreeView.ItemContainerStyle>
<Style TargetType="{x:Type TreeViewItem}">
<!-- IsSelected is a property on ViewModel item -->
<Setter Property="IsSelected" Value="{Binding IsSelected}"/>
<Setter .../>
</Style>
</TreeView.ItemContainerStyle>
</TreeView>
如果Binding不适合您,您可以在Style或ControlTemplate中使用Converters,Triggers。此外,您还可以在DataTemplates中使用触发器。
PS:从头开始编写代码。可能有拼写错误。