如何绑定到DataTemplate中的兄弟元素?

时间:2017-03-07 20:48:58

标签: c# wpf 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中的Image将它的高度绑定到它旁边的TextBlock的实际高度,这样它们的大小相同。到目前为止,我所能找到的所有引用兄弟都依赖于定义x:Name并按名称引用它,但我理解我无法在DataTemplate中命名一个元素,因为它只是一个模板。另外,如果有一种方法将父StackPanel绑定到TextBlock,那么将Image大小绑定到父级也应该可行。如果可能的话。

1 个答案:

答案 0 :(得分:3)

TextBlock上的

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 模板中引用该名称,因为实例化的模板可能只有零个或多个实例。但是在模板中它很好。