我已经建立了一个UserControl,其中包含一些包含TextBlock控件的边框。 TextBlocks的Text属性被设置为来自我的ViewModel对象的数据。命令和菜单
我已经添加了几个上下文菜单中的用户控件的资源:
<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>
最后,我已经添加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引发了该事件。我怎么做?
托尼
编辑:
的用户控件还包含一个ComboBox控件。我发现CanExecute方法在我下拉组合框后右键单击TextBlock时运行。我不必在组合框中选择任何东西,我只需点击它即可。
任何想法的ComboBox可能会做我的代码不是?
另一件事是,在下拉ComboBox后,Execute事件参数的OriginalSource是ComboBox。我想在几个TextBlocks上使用相同的Copy命令,并且我需要知道使用哪个上下文菜单,以便知道将哪个TextBlock的文本复制到剪贴板。帮帮我!