Ho seguito l'articolo this e alcuni altri per creare un Custom RoutedUICommand. Sto usando Infragistics Ribbon, ma non penso che il problema derivi da lì.Utilizzo di Custom RoutedUICommand in xaml genera l'eccezione
<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>
avevamo bisogno di cambiare l'aspetto grafico del Infragistics Ribbon, e un membro del team da Infragistics comunity suggerito uno stile da aggiungere. Il problema è che quando lo abbiamo aggiunto alla sezione Risorse della barra multifunzione, non ha funzionato. quindi siamo stati costretti a effettuare le seguenti operazioni:
var resourceDictionary = new ResourceDictionary();
resourceDictionary.Source = new Uri(
@"/MyNamespace;component/Resources/RibbonResources.xaml",
UriKind.RelativeOrAbsolute);
xamRibbon.Resources.MergedDictionaries.Add(resourceDictionary);
Ciò vale correttamente gli stili del nastro, ma in quel RibbonResources.xaml abbiamo un pulsante:
<Button Name="myButton"
Command="MyNamespaceTag:MyCommands.MyCommand"
Style="{StaticResource {x:Static ToolBar.ButtonStyleKey}}">
<Image Source="MyImage.png" Width="16" Height="16" />
</Button>
Il MyCommand e MyCommands di classe, sono stati creati esattamente come l'articolo che ho menzionato. Ma quando eseguo l'applicazione ottengo il seguente errore:
XamlParseException: Failed to create a 'Command' from the text MyNamespace:MyCommands.MyCommand' InnerException: Type reference cannot find type named '{clr-namespace:MyNamespace}MyCommands'.
Se uso il comando come questo, invece:
Command="{x:Static MyNamespaceTag:MyCommands.MyCommand}"
ottengo la seguente eccezione:
XamlParseException: Provide value on 'System.Windows.Markup.StaticExtension' threw an exception. InnerException: Type reference cannot find type named '{clr-namespace:MyNamespaces}MyCommands'.
In il codice sottostante vincola il comando in questo modo:
CommandBindings.Add(
new CommandBinding(
MyCommands.MyCommand,
Show,
CanShow));
Se mettiamo il pulsante direttamente dove abbiamo XamRibbonWindow, funziona correttamente.
Sono ancora abbastanza nuovo con WPF e non riesco a capire cosa sto facendo male.
Lo spazio dei nomi effettivo che sto usando è Shell, ho appena scritto MyNamespace quando avevo Shell per renderlo più facile da leggere. Ho appena perso quel posto. Lo modificherò di conseguenza. – Dzyann