2013-03-15 63 views
6

我跟隨this文章和其他一些內容來創建Custom RoutedUICommand。 我正在使用Infragistics Ribbon,但我不認爲問題來自那裏。在xaml中使用自定義RoutedUICommand會引發異常

<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> 

我們需要更改Infragistics功能區的外觀和感覺,Infragistics社區的團隊成員建議添加樣式。問題是,當我們將它添加到功能區的資源部分時,它不起作用。 所以我們被迫做到以下幾點:

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: Failed to create a 'Command' from the text MyNamespace:MyCommands.MyCommand' InnerException: Type reference cannot find type named '{clr-namespace:MyNamespace}MyCommands'.

如果我使用的命令是這樣,而不是:

Command="{x:Static MyNamespaceTag:MyCommands.MyCommand}" 

我得到以下異常:

XamlParseException: Provide value on 'System.Windows.Markup.StaticExtension' threw an exception. InnerException: Type reference cannot find type named '{clr-namespace:MyNamespaces}MyCommands'.

在我們的代碼隱藏是這樣綁定命令的:

CommandBindings.Add(
    new CommandBinding(
     MyCommands.MyCommand, 
     Show, 
     CanShow)); 

如果我們把按鈕直接放在我們擁有XamRibbonWindow的地方,它就能正常工作。

我對WPF還很新,而且我弄不清楚我做錯了什麼。

回答

1

你在正確的路徑MyNamespace:MyCommands.MyCommand。看起來您的xaml文件中包含MyNamespace作爲「Shell」。在頂部,在igRibbon:XamRibbonWindow標籤,你應該包括xmlns:MyNamespace=[whatever]屬性,或選擇,來自

MyNamespace:MyCommands.MyCommand

更改命令以

Shell:MyCommands.MyCommand

+0

我正在使用的Actual Namespace是Shell,當我使用Shell來使它更易於閱讀時,我只寫了MyNamespace。我只是錯過了那個地方。我會相應地編輯它。 – Dzyann 2013-03-18 17:46:33

相關問題