リソース ディクショナリで複数の XAML 定義の描画グループをオーバーレイしていますが、奇妙な動作に気付きました。このように DrawingImage を定義すると:
<DrawingImage x:Key="My_Icon">
<DrawingImage.Drawing>
<DrawingGroup>
<DrawingGroup.Children>
<StaticResource ResourceKey="Background" />
<StaticResource ResourceKey="Foreground" />
<DrawingGroup>
<!-- some content here for an overlay -->
</DrawingGroup>
</DrawingGroup.Children>
</DrawingGroup>
</DrawingImage.Drawing>
</DrawingImage>
設計時には問題なく動作しますが、実行時に例外が発生します。
'XAML ノード ストリーム: 'System.Windows.Markup.StaticResourceHolder' の値は、StartObject と StartMember の後に続く必要があります。行番号「14」と行位置「22」。
ただし、静的リソースの前に空の DrawingGroup タグを挿入すると、すべて正常に動作します。
<DrawingImage x:Key="My_Icon">
<DrawingImage.Drawing>
<DrawingGroup>
<DrawingGroup.Children>
<DrawingGroup />
<StaticResource ResourceKey="Background" />
<StaticResource ResourceKey="Foreground" />
<DrawingGroup>
<!-- some content here for an overlay -->
</DrawingGroup>
</DrawingGroup.Children>
</DrawingGroup>
</DrawingImage.Drawing>
</DrawingImage>
なぜこれが起こるのか誰にも分かりますか?これは一般的な XAML ノード処理のバグであり、DrawingGroups に固有のものではないと想定していますが、間違っている可能性があります...
問題の StaticResources は DrawingGroups であることに注意してください。
<DrawingGroup x:Key="Background">
<DrawingGroup.Children>
<GeometryDrawing Geometry="M 3,1.00001L 29,1.00001C 30.1046,1.00001 31,1.89544 31,3.00001L 31,29C 31,30.1046 30.1046,31 29,31L 3,31C 1.89543,31 1,30.1046 1,29L 1,3.00001C 1,1.89544 1.89543,1.00001 3,1.00001 Z ">
<GeometryDrawing.Pen>
<Pen LineJoin="Round" Brush="#FFEB8E00"/>
</GeometryDrawing.Pen>
<GeometryDrawing.Brush>
<RadialGradientBrush RadiusX="0.516666" RadiusY="0.516666" Center="0.499999,0.966667" GradientOrigin="0.499999,0.966667">
<RadialGradientBrush.GradientStops>
<GradientStop Color="#FFFFECA8" Offset="0"/>
<GradientStop Color="#FFFFCD52" Offset="0.2"/>
<GradientStop Color="#FFFFCD52" Offset="0.669767"/>
<GradientStop Color="#FFFFB100" Offset="0.95814"/>
</RadialGradientBrush.GradientStops>
<RadialGradientBrush.RelativeTransform>
<TransformGroup/>
</RadialGradientBrush.RelativeTransform>
</RadialGradientBrush>
</GeometryDrawing.Brush>
</GeometryDrawing>
<GeometryDrawing Brush="#67F9F0AD" Geometry="M 4,19L 28,19C 29.1046,19 30,19.8954 30,21L 30,28C 30,29.1046 29.1046,30 28,30L 4,30C 2.89543,30 2,29.1046 2,28L 2,21C 2,19.8954 2.89543,19 4,19 Z "/>
</DrawingGroup.Children>
</DrawingGroup>
私の使い方は簡単です。この DrawingImage 全体を Infragistics WPF ボタン コントロールにバインドしています。
<igWPF:ButtonTool igWPF:RibbonGroup.MaximumSize="ImageAndTextLarge" Caption="New Item" SmallImage="{StaticResource My_Icon}" LargeImage="{StaticResource My_Icon}" />