在xaml中使用Custom RoutedUICommand会引发异常
本文关键字:异常 RoutedUICommand Custom xaml | 更新日期: 2023-09-27 18:04:03
我遵循了这篇文章和其他一些文章,创建了一个自定义RoutedUICommand。我正在使用Infrasgistics Ribbon,但我不认为问题来自于此。
<igRibbon:XamRibbonWindow x:Class="MyRibbonWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:igRibbon="http://infragistics.com/Ribbon"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:MyNamespaceTag="clr-namespace:MyNamespace"
xmlns:igWPF="http://schemas.infragistics.com/xaml/wpf" mc:Ignorable="d"
WindowState="Maximized">
<igRibbon:XamRibbonWindow.Resources>
<!-- Some DataTempaltes here -->
</igRibbon:XamRibbonWindow.Resources>
<igRibbon:RibbonWindowContentHost x:Name="ribbonWindowContentHost" >
<igRibbon:RibbonWindowContentHost.Ribbon>
<igRibbon:XamRibbon x:Name="xamRibbon" Theme="[current]">
<igRibbon:XamRibbon.ApplicationMenu>
<igRibbon:ApplicationMenu>
<igRibbon:ApplicationMenu.FooterToolbar>
<igRibbon:ApplicationMenuFooterToolbar>
<igRibbon:ButtonTool Name="appMenuOptions" Caption="Opt_ions"/>
</igRibbon:ApplicationMenuFooterToolbar>
</igRibbon:ApplicationMenu.FooterToolbar>
</igRibbon:ApplicationMenu>
</igRibbon:XamRibbon.ApplicationMenu>
</igRibbon:XamRibbon>
</igRibbon:RibbonWindowContentHost.Ribbon>
<ContentControl Content="{Binding MyContent}"
ContentTemplateSelector="{StaticResource myContentTemplateSelector}" />
</igRibbon:RibbonWindowContentHost>
</igRibbon:XamRibbonWindow>
我们需要改变Infrastics Ribbon的外观,Infrastics comunity的一名团队成员建议添加一种样式。问题是,当我们将它添加到Ribbon的"资源"部分时,它不起作用。因此,我们被迫采取以下措施:
var resourceDictionary = new ResourceDictionary();
resourceDictionary.Source = new Uri(
@"/MyNamespace;component/Resources/RibbonResources.xaml",
UriKind.RelativeOrAbsolute);
xamRibbon.Resources.MergedDictionaries.Add(resourceDictionary);
这正确地应用了功能区中的样式,但在RibbonResources.xaml中,我们有一个按钮:
<Button Name="myButton"
Command="MyNamespaceTag:MyCommands.MyCommand"
Style="{StaticResource {x:Static ToolBar.ButtonStyleKey}}">
<Image Source="MyImage.png" Width="16" Height="16" />
</Button>
MyCommand和MyCommands类的创建与我提到的文章完全一样。但是当我运行应用程序时,我会得到以下错误:
XamlParseException:无法从文本创建"命令"MyNamespace:MyCommands.MyCommand'InnerException:类型引用找不到名为"{clr namespace:MyNamespace}MyCommands"的类型。
如果我使用这样的命令:
Command="{x:Static MyNamespaceTag:MyCommands.MyCommand}"
我得到以下异常:
XamlParseException:在上提供值"System.Windows.Markup.StaticExtension"引发异常。InnerException:类型引用找不到名为的类型"{clr namespace:MyNamespaces}MyCommands"。
在后面的代码中,我们绑定的命令如下:
CommandBindings.Add(
new CommandBinding(
MyCommands.MyCommand,
Show,
CanShow));
如果我们把按钮直接放在XamRibbonWindow的位置,它会很好地工作。
我还是WPF的新手,我不知道自己做错了什么。
您使用MyNamespace:MyCommands.MyCommand
的路径是正确的。看起来你在xaml文件中以"Shell"的形式包含了MyNamespace
。在顶部的igRibbon:XamRibbonWindow
标记中,你应该包含一个xmlns:MyNamespace=[whatever]
属性,或者,从更改命令
MyNamespace:MyCommands.MyCommand
至
Shell:MyCommands.MyCommand
。