我有一個TreeView,它被修改爲在文本前面顯示圖像。所以我修改後的TreeViewItem被稱爲ImagedTreeViewItem。 此ImagedTreeViewItem有一個屬性,其中包含要顯示的圖像控件的圖像。 ImagedTreeViewItem還有一個屬性,用於檢查ImagedTreeViewItem-Icon是否爲文件夾圖標。該屬性的名稱是「IsFolder」。綁定一個祖先不工作WPF
我的問題是: I'm Binding the Ancestors-Property (here: The ImagedTreeViewItem)
以獲取我需要的數據。對於我的圖像控制它完美的作品,我後來沒有添加的上下文菜單。 我不明白爲什麼,因爲基本上它是相同的命令。
這裏是我的「ImagedTreeView」的XAML代碼:
<TreeView.Resources>
<Style TargetType="{x:Type myClasses:ImagedTreeViewItem}">
<Setter Property="HeaderedItemsControl.HeaderTemplate">
<Setter.Value>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<!-- Here it works!!! -->
<Image Height="16" Source="{Binding Path=Icon, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type myClasses:ImagedTreeViewItem}}}" Stretch="Fill" Width="16" />
<TextBlock Margin="5,0" Text="{Binding}" />
<StackPanel.ContextMenu>
<ContextMenu>
<!-- Here not :(-->
<MenuItem Command="my:ImagedTreeView.AddFolder" Header="Add Folder"
IsEnabled="{Binding Path=IsFolder,
RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type myClasses:ImagedTreeViewItem}}}">
<MenuItem.Icon>
<Image Source="folderadd16.png" />
</MenuItem.Icon>
</MenuItem>
<!-- ... -->
</ContextMenu>
</StackPanel.ContextMenu>
</StackPanel>
</DataTemplate>
</Setter.Value>
</Setter>
</Style>
</TreeView.Resources>
我想在這個代碼的第二結合找不到祖先。 Visual Studio中的輸出窗口告訴我同樣的:
System.Windows.Data Error: 4 : Cannot find source for binding with reference 'RelativeSource FindAncestor, AncestorType='....ImagedTreeViewItem', AncestorLevel='1''. BindingExpression:Path=IsFolder; DataItem=null; target element is 'MenuItem' (Name=''); target property is 'IsEnabled' (type 'Boolean')
這樣的作品,謝謝! – Hunv 2012-08-04 11:57:29