0
我有这样的代码:WPF双命令执行
<TreeView Name="ExplorerTreeViewStandard" Grid.Row="2" Margin="0,10,10,10" VerticalAlignment="Stretch" ItemsSource="{Binding TreeNodes}" FontSize="14" Background="Transparent" BorderThickness="0"
dd:DragDrop.IsDragSource="True" dd:DragDrop.IsDropTarget="True" dd:DragDrop.DropHandler="{Binding}" dd:DragDrop.UseDefaultDragAdorner="True">
<TreeView.ItemContainerStyle>
<!-- This Style binds a TreeViewItem to a TreeViewNodeViewModel -->
<Style TargetType="{x:Type TreeViewItem}">
<!--<EventSetter Event="Selected" Handler="TreeViewSelectedItemChanged" />-->
<!--<EventSetter Event="Expanded" Handler="TreeExpanded" />-->
<Setter Property="IsExpanded" Value="{Binding IsExpanded, Mode=TwoWay}" />
<Setter Property="IsSelected" Value="{Binding IsSelected, Mode=TwoWay}" />
<Setter Property="FontWeight" Value="DemiBold" />
<Setter Property="FontSize" Value="16" />
<Setter Property="Foreground" Value="DarkBlue" />
<Setter Property="mvvm:EventToCommand.Event" Value="MouseDoubleClick" />
<Setter Property="mvvm:EventToCommand.Command" Value="{Binding RapidExecutionCommand}" />
<Style.Triggers>
<Trigger Property="IsSelected" Value="True">
<Setter Property="FontWeight" Value="Bold" />
<Setter Property="Foreground" Value="Yellow" />
<Setter Property="Background" Value="Blue" />
</Trigger>
</Style.Triggers>
</Style>
</TreeView.ItemContainerStyle>
<TreeView.Resources>
<!--/////////////////////////////////////-->
<!-- Provide the Templates per Node Type -->
<!--/////////////////////////////////////-->
<!-- Root Node Template -->
<HierarchicalDataTemplate DataType="{x:Type local:TreeViewRootNodeViewModel}" ItemsSource="{Binding Children}" >
<StackPanel Orientation="Horizontal">
<StackPanel.ContextMenu>
<ContextMenu>
<MenuItem Header="Refresh" Command="{Binding RefreshCommand}" />
<Separator />
<MenuItem Header="New Folder" Command="{Binding NewNodeCommand}" CommandParameter="{x:Static bo:NodeTypes.F}" />
<MenuItem Header="New Project" Command="{Binding NewNodeCommand}" CommandParameter="{x:Static bo:NodeTypes.P}" />
<Separator />
<MenuItem Header="Paste" Visibility="{Binding Path=CanPaste, Converter={StaticResource BoolToVisibilityConverter}}" Command="{Binding CutCopyPasteNodeCommand}" CommandParameter="{x:Static local:NodeOperations.Paste}" />
</ContextMenu>
</StackPanel.ContextMenu>
<Image Width="16" Height="16" Source="{Binding NodeIcon}" VerticalAlignment="Center" />
<TextBlock Text="{Binding NodeData}" VerticalAlignment="Center" Margin="3,0,0,0" FontWeight="Bold" FontStyle="Italic" FontSize="20" />
</StackPanel>
</HierarchicalDataTemplate>
<!-- Folder Node Template -->
<HierarchicalDataTemplate DataType="{x:Type local:TreeViewFolderNodeViewModel}" ItemsSource="{Binding Children}" >
<StackPanel Orientation="Horizontal">
<StackPanel.ContextMenu>
<ContextMenu>
<MenuItem Header="Refresh" Command="{Binding RefreshCommand}" />
<Separator />
<MenuItem Header="New Folder" Command="{Binding NewNodeCommand}" CommandParameter="{x:Static bo:NodeTypes.F}" />
<MenuItem Header="New Project" Command="{Binding NewNodeCommand}" CommandParameter="{x:Static bo:NodeTypes.P}" />
<Separator />
<MenuItem Header="Cut" Command="{Binding CutCopyPasteNodeCommand}" CommandParameter="{x:Static local:NodeOperations.Cut}" />
<!--Copy folder disabled per bug# 1617 Dec-27-2013-->
<!--<MenuItem Header="Copy" Command="{Binding CutCopyPasteNodeCommand}" CommandParameter="{x:Static local:NodeOperations.Copy}" />-->
<MenuItem Header="Paste" Visibility="{Binding Path=CanPaste, Converter={StaticResource BoolToVisibilityConverter}}" Command="{Binding CutCopyPasteNodeCommand}" CommandParameter="{x:Static local:NodeOperations.Paste}" />
<Separator />
<MenuItem Header="Delete" Command="{Binding DeleteFolderCommand}" />
</ContextMenu>
</StackPanel.ContextMenu>
<Image Width="16" Height="16" Source="{Binding NodeIcon}" VerticalAlignment="Center" />
<TextBlock Text="{Binding NodeData}" VerticalAlignment="Center" Margin="3,0,0,0" />
</StackPanel>
</HierarchicalDataTemplate>
<!-- Project Node Template -->
<HierarchicalDataTemplate DataType="{x:Type local:TreeViewProjectNodeViewModel}" ItemsSource="{Binding Children}" >
<StackPanel Orientation="Horizontal">
<StackPanel.ContextMenu>
<ContextMenu>
<MenuItem Header="Refresh" Command="{Binding RefreshCommand}" />
<Separator />
<MenuItem Header="Rapid Execution" Command="{Binding RapidExecutionCommand}" Visibility="{Binding Path=EnableRapidExecution, UpdateSourceTrigger=PropertyChanged}" />
<Separator />
<!--Bug 1700-->
<!--<MenuItem Header="New Folder" Command="{Binding NewNodeCommand}" CommandParameter="{x:Static bo:NodeTypes.F}" />
<MenuItem Header="New Project" Command="{Binding NewNodeCommand}" CommandParameter="{x:Static bo:NodeTypes.P}" />-->
<!--<Separator />-->
<MenuItem Header="Cut" Command="{Binding CutCopyPasteNodeCommand}" CommandParameter="{x:Static local:NodeOperations.Cut}" />
<!--Copy project disabled per bug# 1617 Dec-27-2013-->
<!--<MenuItem Header="Copy" Command="{Binding CutCopyPasteNodeCommand}" CommandParameter="{x:Static local:NodeOperations.Copy}" />-->
<MenuItem Header="Paste" Visibility="{Binding Path=CanPaste, Converter={StaticResource BoolToVisibilityConverter}}" Command="{Binding CutCopyPasteNodeCommand}" CommandParameter="{x:Static local:NodeOperations.Paste}" />
<Separator />
<MenuItem Header="Disable Project" Command="{Binding DisableProjectCommand}" Visibility="{Binding Path=EnableDisable, UpdateSourceTrigger=PropertyChanged}" />
<MenuItem Header="Resume Project" Command="{Binding ResumeProjectCommand}" Visibility="{Binding Path=EnableResume, UpdateSourceTrigger=PropertyChanged}" />
<MenuItem Header="Clone Project" Command="{Binding CloneProjectCommand}" Visibility="{Binding Path=EnableClone, UpdateSourceTrigger=PropertyChanged}" />
<MenuItem Header="Clone Related Project" Command="{Binding CloneRelatedProjectCommand}" />
<MenuItem Header="Update Group Properties" Visibility="{Binding Path=EnableRelated, UpdateSourceTrigger=PropertyChanged}" >
<MenuItem Header="Split Project" Command="{Binding SplitRelatedProjectCommand }" />
<MenuItem Header="All Related Projects" Command="{Binding UpdateRelatedProjectCommand }" />
</MenuItem>
<Separator />
<MenuItem Header="Show Versions" Command="{Binding ShowVersionsCommand}" />
<MenuItem Header="Collapse Versions" Command="{Binding CollapseVersionsCommand}" />
<!--<Separator />-->
<!--<MenuItem Header="Delete" Command="{Binding DeleteNodeCommand}" />-->
</ContextMenu>
</StackPanel.ContextMenu>
<Image Width="16" Height="16" Source="{Binding NodeIcon}" VerticalAlignment="Center" />
<TextBlock Text="{Binding NodeData}" VerticalAlignment="Center" Margin="3,0,0,0" />
</StackPanel>
</HierarchicalDataTemplate>
<!-- Version Node Template -->
<HierarchicalDataTemplate DataType="{x:Type local:TreeViewVersionNodeViewModel}" ItemsSource="{Binding Children}" >
<StackPanel Orientation="Horizontal">
<StackPanel.ContextMenu>
<ContextMenu>
<MenuItem Header="Rapid Execution" Command="{Binding RapidExecutionVersionCommand}" Visibility="{Binding Path=EnableRapidExecution, UpdateSourceTrigger=PropertyChanged}" />
<Separator />
<MenuItem Header="ReOpen" Command="{Binding ReOpenCommand}" />
</ContextMenu>
</StackPanel.ContextMenu>
<Image Width="16" Height="16" Source="{Binding NodeIcon}" VerticalAlignment="Center" />
<TextBlock Text="{Binding NodeData}" VerticalAlignment="Center" Margin="3,0,0,0" />
</StackPanel>
</HierarchicalDataTemplate>
</TreeView.Resources>
</TreeView>
的问题是,当我双击并运行“RapidExecutionCommand”我有它的版本类和项目类(项目之父版本)。 因此,当我双击项目一切都很好,但是当我双击版本时,它从版本和项目运行命令。
任何sujestions如何解决这个问题?
我tryid这样的:
<Setter Property="mvvm:EventToCommand.Event" Value="MouseDoubleProjectClick" />
<Setter Property="mvvm:EventToCommand.Command" Value="{Binding MouseDoubleProjectClick}" />
<Setter Property="mvvm:EventToCommand.Event" Value="MouseDoubleVersionClick" />
<Setter Property="mvvm:EventToCommand.Command" Value="{Binding MouseDoubleVersionClick}" />
但没有eather工作,只有项目共进午餐。
新编辑: 添加此操作但e.handler始终为false。
private static void CommandChanged(DependencyObject target, DependencyPropertyChangedEventArgs e)
{
Control control = target as Control;
if (control != null)
{
if ((e.NewValue != null) && (e.OldValue == null))
{
control.MouseDoubleClick += OnMouseDoubleClick;
}
else if ((e.NewValue == null) && (e.OldValue != null))
{
control.MouseDoubleClick -= OnMouseDoubleClick;
}
}
}
private static void OnMouseDoubleClick(object sender, RoutedEventArgs e)
{
Control control = sender as Control;
ICommand command = (ICommand)control.GetValue(CommandProperty);
object commandParameter = control.GetValue(CommandParameterProperty);
command.Execute(commandParameter);
e.Handled = true;
}
任何帮助将是伟大的。
完成它, 它仍然有好处。 “e.Handled”;仍然错误,当它去父亲 – igor 2014-09-01 10:22:50
尽量不要''EventHandler'和'Command'在'TreeView.ItemContainerStyle'风格。将它们放入每个项目的'HierarchicalDataTemplate'中。 'Command'和'EventHandler'应该对'TreeView'边界项运行,所以将它分配给该项。 – toadflakz 2014-09-01 10:33:26
我编辑的问题,你可以检查,如果你觉得? thnks。 – igor 2014-09-01 11:26:54