如何绑定到 DataTemplate 中的兄弟元素?
How to bind to sibling element in DataTemplate?
我有以下 TreeView:
<TreeView Grid.Column="2" x:Name="itemTreeView" Margin="0" SelectedItemChanged="SelectionChanged">
<TreeView.Resources>
<HierarchicalDataTemplate DataType="{x:Type local:MarketGroup}">
<HierarchicalDataTemplate.ItemsSource>
<Binding Path="children"/>
</HierarchicalDataTemplate.ItemsSource>
<TextBlock Text="{Binding marketGroupName}" ToolTip="{Binding description}"/>
</HierarchicalDataTemplate>
<DataTemplate DataType="{x:Type local:ItemType}">
<StackPanel Orientation="Horizontal">
<Image Source="{Binding itemImage}" Height="{Binding Sibling.ActualHeight}"/>
<TextBlock Text="{Binding typeName}" ToolTip="{Binding description}"/>
</StackPanel>
</DataTemplate>
</TreeView.Resources>
</TreeView>
所以我想要做的是让位于 DataTemplate 中的图像将其高度绑定到它旁边的 TextBlock 的实际高度,以便它们大小相同。到目前为止,我所能找到的所有引用兄弟姐妹的方法都依赖于定义 x:Name 并按名称引用它,但据我所知,我无法在 DataTemplate 中命名一个元素,因为它只是一个模板。或者,如果有一种方法可以将父级 StackPanel 绑定到 TextBlock,那么将图像大小绑定到父级也应该可行。
x:Name
在 TextBlock 上,ElementName
在 Binding 上。
<Image
Source="{Binding itemImage}"
Height="{Binding ActualHeight, ElementName=SiblingTextBlock}"
/>
<TextBlock
x:Name="SiblingTextBlock"
Text="{Binding typeName}"
ToolTip="{Binding description}"
/>
谁告诉你在 DataTemplate
中行不通的?您自然无法从模板 外部 引用该名称,因为实例化的模板实例可能有零个或多个。但在模板中它很好。
我有以下 TreeView:
<TreeView Grid.Column="2" x:Name="itemTreeView" Margin="0" SelectedItemChanged="SelectionChanged">
<TreeView.Resources>
<HierarchicalDataTemplate DataType="{x:Type local:MarketGroup}">
<HierarchicalDataTemplate.ItemsSource>
<Binding Path="children"/>
</HierarchicalDataTemplate.ItemsSource>
<TextBlock Text="{Binding marketGroupName}" ToolTip="{Binding description}"/>
</HierarchicalDataTemplate>
<DataTemplate DataType="{x:Type local:ItemType}">
<StackPanel Orientation="Horizontal">
<Image Source="{Binding itemImage}" Height="{Binding Sibling.ActualHeight}"/>
<TextBlock Text="{Binding typeName}" ToolTip="{Binding description}"/>
</StackPanel>
</DataTemplate>
</TreeView.Resources>
</TreeView>
所以我想要做的是让位于 DataTemplate 中的图像将其高度绑定到它旁边的 TextBlock 的实际高度,以便它们大小相同。到目前为止,我所能找到的所有引用兄弟姐妹的方法都依赖于定义 x:Name 并按名称引用它,但据我所知,我无法在 DataTemplate 中命名一个元素,因为它只是一个模板。或者,如果有一种方法可以将父级 StackPanel 绑定到 TextBlock,那么将图像大小绑定到父级也应该可行。
x:Name
在 TextBlock 上,ElementName
在 Binding 上。
<Image
Source="{Binding itemImage}"
Height="{Binding ActualHeight, ElementName=SiblingTextBlock}"
/>
<TextBlock
x:Name="SiblingTextBlock"
Text="{Binding typeName}"
ToolTip="{Binding description}"
/>
谁告诉你在 DataTemplate
中行不通的?您自然无法从模板 外部 引用该名称,因为实例化的模板实例可能有零个或多个。但在模板中它很好。