wpf commandtarget для routeduicommand с вложенными элементами управления
У меня есть главное окно, которое состоит в основном из элемента управления жидкой лентой в виде меню и строки состояния. У этого также есть контроль содержания, где я загружаю представления (usercontrols).
Я использую RoutedUICommand для выполнения событий кнопок из моих кнопок ленты. В зависимости от действия кнопок ленты я хочу, чтобы они выполнялись в главном окне или в загруженном представлении (usercontrol).
Моя проблема в том, что когда я связываю свою ленту с командой, которая выполняется внутри загруженного пользовательского элемента управления, она выглядит так, как будто не имеет значения, какова моя привязка к целевой команде, я всегда получаю пользовательский элемент управления в качестве отправителя и источника в моих ExecutedRoutedEventArgs.
В этом конкретном случае мне нужно получить актуальную Fluent.Button, чтобы я мог изменить текст и значок на кнопке, так как это своего рода кнопка переключения, поэтому я хочу переключить текст с открытия -> закрыть -> открыть и то же самое со связанным иконки.
При создании моего usercontrol я связываю команду:
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, которая работает, но я не думаю, что это решение, потому что, если мне нужно будет передать параметр actall, мне также потребуется реально работающая цель.