主にメニューとステータスバーとしてのfluidribbonコントロールで構成されるメインウィンドウがあります。ビュー(ユーザーコントロール)をロードするコンテンツコントロールもあります。
RoutedUICommand を使用して、リボン ボタンからボタン イベントを実行しています。リボン ボタンのアクションに応じて、メイン ウィンドウまたは読み込まれたビュー (ユーザー コントロール) で実行する必要があります。
私の問題は、ロードされたユーザーコントロール内で実行されるコマンドにリボンボタンをバインドすると、コマンドターゲットバインディングが何であるかは関係ないように見えることです。
この特定のケースでは、実際の Fluent.Button を取得する必要があるため、ボタンのテキストとアイコンを変更できます。これは一種のトグル ボタンであるため、open -> close -> open からテキストを切り替えたいため、関連付けられているものと同じですアイコン。
ユーザーコントロールの作成時に、コマンドをバインドします:
this.CommandBindings.Add(new CommandBinding(CommandLibrary.InvoiceControl_PreviewToggle, OnPreviewToggle_Command));
それから私は私のイベントを持っています:
private void OnPreviewToggle_Command(object sender, ExecutedRoutedEventArgs e)
{
var button = e.Source as Fluent.Button;
}
次に、メイン ウィンドウで、RibbonButton を取得しました。
<Fluent:Button x:Name="PreviewToggle_Button" Header="Open" Icon="/levscan.wpf.resources;component/Icons/appbar.layer.perspective.up.png" LargeIcon="/levscan.wpf.resources;component/Icons/appbar.layer.perspective.up.png" Command="cmd:CommandLibrary.InvoiceControl_PreviewToggle" CommandTarget="{Binding ElementName=PreviewToggle_Button}" CanAddToQuickAccessToolBar="False"/>
そして、私は常に送信者と e.Source = my usercontrol を取得し、e.OriginalSource シームは、usercontrol で現在フォーカスされている要素になります。
編集
ターゲットの問題を解決する回避策を見つけました。ボタンを CommandParameter として渡すことができますが、実際のパラメーターを渡す必要がある場合は、実際に動作するターゲットが必要になるため、解決策ではないと思います。