TextBlock コントロールを含む多数の Borders を含む UserControl を作成しました。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>
最後に、CommbandBindings を UserControl に追加しました。
<UserControl.CommandBindings>
<CommandBinding Command="Copy" CanExecute="CopyCommand_CanExecute" Executed="CopyCommand_Executed" />
<CommandBinding Command="cs:CarSystemCommands.CopyPlateCommand" CanExecute="CopyCommand_CanExecute" Executed="CopyPlateCommand_Executed" />
</UserControl.CommandBindings>
これまでのところ、これには2つの問題があります。
コントロールを右クリックすると、メニューが表示されますが、選択肢がグレー表示されます。CopyCommand_CanExecute、CopyCommand_Executed、および CopyPlateCommand_Executed メソッドの先頭にブレークポイントを配置しました。これらのブレークポイントは、これまでのところ 1 回の実行でヒットしました。なぜ彼らがその時に攻撃されたのかはわかりませんが、それ以前もそれ以降もありません。CanExecute メソッドが毎回呼び出されるようにするにはどうすればよいですか?
一度ブレークポイントにヒットしたとき、引数の Source プロパティは、私が思っていたコントロールではなく、UserControl でした。UserControl のどの TextBlocks がイベントを発生させたかを知る必要があります。それ、どうやったら出来るの?
トニー
編集:
UserControl には、ComboBox コントロールも含まれています。ComboBox をドロップダウンした後に TextBlocks を右クリックすると、CanExecute メソッドが実行されることがわかりました。コンボボックスで何も選択する必要はありません。クリックするだけです。
私のコードではなく、ComboBox が何をしているのか考えてみませんか?
もう 1 つのことは、ComboBox をドロップダウンした後、Execute イベント引数の OriginalSource が ComboBox であることです。いくつかの TextBlocks で同じ Copy コマンドを使用したいのですが、どの TextBlock の Text をクリップボードにコピーするかを知るために、どのコンテキスト メニューが使用されたかを知る必要があります。ヘルプ!