2017-03-07 15 views
0

我有以下的TreeView:如何綁定到DataTemplate中的同級元素?

<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,那麼將圖像大小綁定到父級應該可以工作。

回答

2

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中工作?您自然無法從模板的之外的引用該名稱,因爲可能有零個或多個實例化的模板實例。但在模板內,它很好。

+1

也許他們指的是從'DataTemplate'之外引用它,我測試了它,它正在做我在找的東西。猜猜我應該試過它。 – themightymanuel

+0

@themightymanuel我認爲這一定是它。很多人遇到了範圍問題。 –

相關問題