而且我有一個TreeView一個用戶控件,並用文本菜單的DependencyProperty:如何將ContextMenu綁定到每個TreeView項目?
public ObservableCollection<Control> ContextMenu {
get {
return (ObservableCollection<Control>)GetValue(ContextMenuProperty);
}
set {
SetValue(ContextMenuProperty, value);
}
}
public static readonly DependencyProperty ContextMenuProperty =
DependencyProperty.Register("ContextMenu", typeof(ObservableCollection<Control>), typeof(FilterableTreeViewControl),
new PropertyMetadata(new ObservableCollection<Control>(), new PropertyChangedCallback(FilterableTreeViewControl.OnContextMenuPropertyChange)));
private static void OnContextMenuPropertyChange(DependencyObject d, DependencyPropertyChangedEventArgs e) {
FilterableTreeViewControl ctrl = d as FilterableTreeViewControl;
ctrl.OnContextMenuChange((Object)e.NewValue);
}
protected virtual void OnContextMenuChange(Object NewItemsSource) {
}
的XAML:
<controlsToolkit:TreeViewDragDropTarget AllowDrop="True" HorizontalContentAlignment="Stretch" VerticalContentAlignment="Stretch" Drop="TreeViewDragDropTarget_Drop" AllowedSourceEffects="All">
<controlsToolkit:TreeViewDragDropTarget.Resources>
<Data:HierarchicalDataTemplate x:Key="TreeViewTemplate" ItemsSource="{Binding Children}">
<StackPanel Orientation="Horizontal" Height="Auto" Width="Auto">
<Image Source="{Binding Type,Converter={StaticResource TreeIconConverter}}" />
<TextBlock x:Name="NameTextBlock" Text="{Binding Name}">
<controlsInputToolkit:ContextMenuService.ContextMenu>
<controlsInputToolkit:ContextMenu ItemsSource="{Binding ElementName=MyTreeViewControl, Path=ContextMenu}" />
</controlsInputToolkit:ContextMenuService.ContextMenu>
</TextBlock>
</StackPanel>
</Data:HierarchicalDataTemplate>
</controlsToolkit:TreeViewDragDropTarget.Resources>
<Controls:TreeView Name="treeView" ItemTemplate="{StaticResource TreeViewTemplate}">
</Controls:TreeView>
</controlsToolkit:TreeViewDragDropTarget>
用法:
<my:MyControl
DragEnabled="False"
ItemsSource="{Binding TreeRootNodes}"
FilterCaption="Filter:"
SelectionChangedCommand="{Binding SelectedMachineGroupChangedCommand_L}"
DropCommand="{Binding DropCommand}">
<my:FilterableTreeViewControl.ContextMenu>
<controlsInputToolkit:MenuItem Header="Menu 1" />
<controlsInputToolkit:MenuItem Header="Menu 2" />
<controlsInputToolkit:MenuItem Header="Menu 3" />
</my:MyControl.ContextMenu>
</my:MyControl>
第一工作一切正常,但在第二次之後,我明顯得到了「元素已經是另一個元素的孩子」。例外。
是否可以通過綁定來解決這個問題,而沒有任何代碼隱藏?
非常好的主意,謝謝! – Aaaaaaaa
它可以工作,但我無法將命令綁定到MenuItems:'' - 不起作用。如果我更改ElementName,我不會得到任何綁定異常。任何想法? –
Aaaaaaaa
它給你什麼例外?您是在「MyMainPage」還是ResourceDictionary中定義此綁定? – fsong