如何绑定到 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 中行不通的?您自然无法从模板 外部 引用该名称,因为实例化的模板实例可能有零个或多个。但在模板中它很好。