6

この記事と他の記事に従って、カスタム RoutedUICommand を作成しました。Infragistics 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>

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: テキスト MyNamespace:MyCommands.MyCommand から 'Command' を作成できませんでした 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 を使い始めたばかりで、何が間違っているのかわかりません。

4

1 に答える 1

1

あなたは正しい道を進んでいますMyNamespace:MyCommands.MyCommandMyNamespacexamlファイルに「シェル」として含めているようです。上部のigRibbon:XamRibbonWindowタグに属性を含めるxmlns:MyNamespace=[whatever]か、コマンドを次のように変更する 必要があります

MyNamespace:MyCommands.MyCommand

Shell:MyCommands.MyCommand

于 2013-03-18T16:31:15.023 に答える