我已经构建了一个 UserControl,其中包含许多包含 TextBlock 控件的边框。TextBlocks 的 Text 属性设置为来自我的 ViewModel 对象的数据。
我在 UserControl 的资源中添加了几个上下文菜单:
<UserControl.Resources>
<ContextMenu x:Key="ContextMenu">
<MenuItem Header="Copy Plate" Command="cs:CarSystemCommands.CopyPlateCommand" />
<MenuItem Header="Search Plate" Command="cs:CarSystemCommands.SearchPlateCommand" />
</ContextMenu>
<ContextMenu x:Key="TextBoxContextMenu">
<MenuItem Header="_Copy" Command="Copy" />
<MenuItem Header="Copy Plate" Command="cs:CarSystemCommands.CopyPlateCommand" />
<MenuItem Header="Search Plate" Command="cs:CarSystemCommands.SearchPlateCommand" />
</ContextMenu>
</UserControl.Resources>
我在我的 TextBlocks 中添加了对上下文菜单的引用。这是一个例子:
<Border Background="#FFFFFF78"
BorderBrush="Black"
BorderThickness="2"
ContextMenu="{StaticResource TextBoxContextMenu}"
Grid.Column="0"
Margin="5,10,5,5">
<TextBlock FontSize="18"
FontWeight="Bold"
HorizontalAlignment="Center"
Margin="5"
x:Name="Camera"
VerticalAlignment="Center" />
</Border>
最后,我在 UserControl 中添加了 CommbandBindings:
<UserControl.CommandBindings>
<CommandBinding Command="Copy" CanExecute="CopyCommand_CanExecute" Executed="CopyCommand_Executed" />
<CommandBinding Command="cs:CarSystemCommands.CopyPlateCommand" CanExecute="CopyCommand_CanExecute" Executed="CopyPlateCommand_Executed" />
</UserControl.CommandBindings>
迄今为止,我对所有这一切都有两个问题:
当我右键单击控件时,我会看到菜单,但选项是灰色的。我在 CopyCommand_CanExecute、CopyCommand_Executed 和 CopyPlateCommand_Executed 方法的开头放置了断点。到目前为止,这些断点仅在一次运行中就被击中。我不知道他们为什么在那次被击中,但之前或之后都没有。如何确保每次都调用 CanExecute 方法?
有一次断点确实被击中,参数的 Source 属性不是我认为的控件,而是 UserControl。我需要知道 UserControl 上的哪个 TextBlocks 引发了事件。我怎么做?
托尼
编辑:
UserControl 还包含一个 ComboBox 控件。我发现当我在下拉组合框后右键单击 TextBlocks 时,CanExecute 方法确实会运行。我不必在组合框中选择任何内容,只需单击它即可。
任何想法 ComboBox 可能在做什么我的代码不是?
另一件事是下拉ComboBox后,Execute事件参数的OriginalSource就是ComboBox。我想在几个 TextBlocks 上使用相同的 Copy 命令,并且我需要知道使用了哪个的上下文菜单,以便知道要复制到剪贴板的 TextBlock 的哪个文本。帮助!