我是新手,无法退出获得正确的语法。这可以正确捕获树视图中文本框的Left Mouse click
:
<HierarchicalDataTemplate
DataType="{x:Type r:NetworkViewModel}"
ItemsSource="{Binding Children}"
>
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding NetworkIP}" Width="110" >
<TextBlock.InputBindings>
<MouseBinding MouseAction="LeftClick"
Command="{Binding DataContext.SelectItem, RelativeSource={RelativeSource FindAncestor, AncestorType=TreeView}}"
CommandParameter="{Binding}" />
</TextBlock.InputBindings>
</TextBlock>
</StackPanel>
</HierarchicalDataTemplate>
如何使用Style
中的Resources
块来完成此操作?
目标是为TextBoxes
中的所有TreeView
使用相同的样式。可能位于Usercontrol.Resources
并由HierarchicalDataTemplate
引用的内容。
答案 0 :(得分:1)
如果我理解正确,您可以在控件或窗口资源中使用目标类型(与键x:Key=...
相对)定义模板,以使其自动应用于树视图中的所有项目。
这是一个小例子,在窗口资源中定义了一个模板,其中包含InputBindings
定义。如果ItemViewModel
或ItemsControl
未明确定义其他模板,则此模板将自动应用于TreeView
类型的所有对象。在此示例中,项目以简单的ItemsControl
显示,但它适用于TreeView
。{/ p>
请注意,要使其正常工作,TreeView
中的所有项目都必须属于同一类型。 如果它们来自相同的基本类型是不够的。如果Template.DataType
中定义的类型与ViewModel 的类型完全相同,则仅应用模板。如果TreeView ItemsScource
包含混合类型,则需要分别为每种类型指定模板。
<Window x:Class="WpfApplication2.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:loc="clr-namespace:WpfApplication2"
Title="MainWindow" Height="350" Width="525">
<Window.Resources>
<DataTemplate DataType="{x:Type loc:ItemViewModel}">
<TextBlock Text="{Binding Name}" Width="110" >
<TextBlock.InputBindings>
<MouseBinding
MouseAction="LeftClick"
Command="{Binding SelectItem}" />
</TextBlock.InputBindings>
</TextBlock>
</DataTemplate>
</Window.Resources>
<Grid>
<ItemsControl ItemsSource="{Binding Items}" />
</Grid>
</Window>