WPFクライアントアプリケーションで、階層データテンプレートを使用してデータバインドされたメニュー項目を読み込むのに問題があります。
最初に、メニュー項目の基本プロパティ(Title、Command、ImageSource(Iconプロパティに使用する画像へのパス)およびサブ項目)を含むViewModelを作成しました。
次に、メニューを表示するためにXAMLウィンドウでビューを作成しました。サブアイテムを考慮してコレクションをバインドするために、メニューアイテムテンプレートに階層データテンプレートを使用しました。
ItemTemplateのXAMLコードは次のとおりです。
<HierarchicalDataTemplate DataType="{x:Type vm:MenuItemViewModel}" ItemsSource="{Binding Path=Items}">
<HierarchicalDataTemplate.ItemContainerStyle>
<Style TargetType="MenuItem">
<Style.Resources>
<Image x:Key="ItemImage" Source="{Binding ImageSource}" Width="16" Height="16" x:Shared="false" />
</Style.Resources>
<Style.Setters>
<Setter Property="Command" Value="{Binding Command}" />
<Setter Property="CommandParameter" Value="{Binding CommandParameter}" />
<Setter Property="Icon" Value="{StaticResource ItemImage}" />
</Style.Setters>
</Style>
</HierarchicalDataTemplate.ItemContainerStyle>
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding Title}" />
</StackPanel>
</HierarchicalDataTemplate>
メニューを初期化してウィンドウを表示すると、すべて正常に見えます。
その後、アプリケーションのどこからでもデフォルトのテンプレートとして再利用できるように、メニュー項目テンプレートをリソースディクショナリに入れようとしました。それを行うと、例外がスローされます:
名前空間'http://schemas.microsoft.com/winfx/2006/xaml'の共有属性は、コンパイルされたリソースディクショナリでのみ使用できます。
解決策を探すのに多くの時間を費やした後、私はついに問題を実証するためのテスタープロジェクト(ここで入手可能)を作成しました。
リソースディクショナリをコンパイル済みリソースディクショナリにする方法がわかりません...誰か助けてもらえますか?