2

我有一个主窗口,主要由一个作为菜单的流体带控件和一个状态栏组成。它还有一个内容控件,我在其中加载视图(用户控件)。

我使用 RoutedUICommand 从我的功能区按钮执行按钮事件。根据功能区按钮操作,我希望它们在主窗口或加载的视图(用户控件)中执行。

我的问题是,当我将功能区按钮绑定到在加载的用户控件内执行的命令时,它看起来就像我的命令目标绑定是什么并不重要,我总是将用户控件作为我的 ExecutedRoutedEventArgs 中的发送者和源。

在这种特殊情况下,我需要获取实际的 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"/>

而且我总是让 sender 和 e.Source = my usercontrol 和 e.OriginalSource 接缝成为我的 usercontrol 中当前关注的元素。

编辑

找到了解决目标问题的解决方法,我可以将按钮作为 CommandParameter 传递,这有效,但我不认为这是一个解决方案,因为如果我需要传递实际参数,我也需要一个实际工作的目标。

4

0 回答 0