【发布时间】:2015-12-02 12:31:08
【问题描述】:
我们将使用 WPF 开发一个行为树编辑器。 但是,我们对 WPF 完全陌生。 如何生成代表树节点的形状组件,并且组件应该能够响应鼠标事件,如鼠标单击。
您对此有什么建议吗?
【问题讨论】:
标签: wpf behavior-tree
我们将使用 WPF 开发一个行为树编辑器。 但是,我们对 WPF 完全陌生。 如何生成代表树节点的形状组件,并且组件应该能够响应鼠标事件,如鼠标单击。
您对此有什么建议吗?
【问题讨论】:
标签: wpf behavior-tree
您可以为您的树指定不同的HierarchicalDataTemplate。它们由类名自动选择。您还可以为您的基本类型指定一个。确保不要使用接口,而是使用真正的类。
因此,如果您对视图模型使用不同的类,则可以这样处理:
<TreeView
ItemsSource="{Binding MyTreeVariable}"
SelectedItemChanged="MyTree_SelectedItemChanged">
<TreeView.Resources>
<HierarchicalDataTemplate ItemsSource="{Binding Path=Children}" DataType="{x:Type self:MyBaseType}">
<StackPanel Orientation="Horizontal">
<Rectangle Width="16" Height="16"/>
<TextBlock Text="{Binding Path=Name}"/>
</StackPanel>
</HierarchicalDataTemplate>
<HierarchicalDataTemplate ItemsSource="{Binding Path=Children}" DataType="{x:Type self:MySpecialType1}">
<StackPanel Orientation="Horizontal">
<Ellipse Width="16" Height="16"/>
<TextBlock Text="{Binding Path=Name}"/>
</StackPanel>
</HierarchicalDataTemplate>
<HierarchicalDataTemplate ItemsSource="{Binding Path=Children}" DataType="{x:Type self:MySpecialType2}">
<StackPanel Orientation="Horizontal">
<!--- Triangle -->
<Polygon Points="50,0 100,100 0,100" Width="16" Height="16"/>
<TextBlock Text="{Binding Path=Name}"/>
</StackPanel>
</HierarchicalDataTemplate>
</TreeView.Resources>
</TreeView>
如果你想通过数据来区分不同的行为,你可以使用DataTrigger和Setter,但我推荐上面的方式。
【讨论】: