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, мне также потребуется реально работающая цель.

0 ответов

Другие вопросы по тегам