我有以下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中的Image将它的高度绑定到它旁边的TextBlock的实际高度,这样它们的大小相同。到目前为止,我所能找到的所有引用兄弟都依赖于定义x:Name并按名称引用它,但我理解我无法在DataTemplate中命名一个元素,因为它只是一个模板。另外,如果有一种方法将父StackPanel绑定到TextBlock,那么将Image大小绑定到父级也应该可行。如果可能的话。
答案 0 :(得分:3)
x:Name
,Binding中的ElementName
。
<Image
Source="{Binding itemImage}"
Height="{Binding ActualHeight, ElementName=SiblingTextBlock}"
/>
<TextBlock
x:Name="SiblingTextBlock"
Text="{Binding typeName}"
ToolTip="{Binding description}"
/>
谁告诉过你,DataTemplate
无效?您自然无法从 outside 模板中引用该名称,因为实例化的模板可能只有零个或多个实例。但是在模板中它很好。