私はDrawingBrush
という3つの色、つまり境界、前景、背景がハードコードされているとします。DrawingBrushで色を再マッピングする方法は?
<!-- Resource -->
<DrawingBrush x:Key="EventIcon" Stretch="Uniform">
<DrawingBrush.Drawing>
<DrawingGroup>
<DrawingGroup.Children>
<GeometryDrawing Brush="#FF9200CE" Geometry="F1 M 51.2119,61.4688L 43.4193,61.4688L 43.4194,29.318L 27.8341,29.318L 27.834,61.4688L 20.0414,61.4688L 35.6267,77.1353L 51.2119,61.4688 Z "/>
<GeometryDrawing Brush="#FFB400FF" Geometry="F1 M 44.4789,64.2014L 40.2667,64.2667L 40.13,29.318L 27.8341,29.318L 27.834,61.4688L 20.0414,61.4688L 33.8667,75.1467L 44.4789,64.2014 Z "/>
<GeometryDrawing Geometry="F1 M 51.2119,61.4688L 43.4193,61.4688L 43.4194,29.318L 27.8341,29.318L 27.834,61.4688L 20.0414,61.4688L 35.6267,77.1353L 51.2119,61.4688 Z ">
<GeometryDrawing.Pen>
<Pen Thickness="2" StartLineCap="Round" EndLineCap="Round" LineJoin="Round" Brush="#FF3D0033"/>
</GeometryDrawing.Pen>
</GeometryDrawing>
<GeometryDrawing Brush="#FFFFFFFF" Geometry="F1 M 33.7559,53.2538L 32.6202,40.9989L 32.6202,35.3362L 37.3531,35.3362L 37.3531,40.9989L 36.2333,53.2538L 33.7559,53.2538 Z M 32.6202,59.6771L 32.6202,54.9442L 37.3531,54.9442L 37.3531,59.6771L 32.6202,59.6771 Z "/>
</DrawingGroup.Children>
</DrawingGroup>
</DrawingBrush.Drawing>
</DrawingBrush>
<!-- Usage -->
<Rectangle Width="16" Height="16" Fill="{StaticResource EventIcon}" />
親Rectangle
からこれらの色を変更することができ、依然としてデフォルトのフォールバックを持っている最良の方法だろうどのような質問
?
私はこの質問を書くように、私は、例えば、それらと同等のプロパティに、それぞれを接続するための結合RelativeSource
を使用した2つの解決策...
可能な溶液#1
に考えています{Binding Path=BorderBrush, RelativeSource={RelativeSource AncestorType={x:type Rectangle}}
しかし:
Rectangle
Shape
がBorderBrush
性質を持っていないという。- デフォルト値を指定できませんでした。バインディングが解決してデフォルト値になるので、バインディングに
FallbackValue
を指定すると機能しません。 (編集:私はこれを書いているので、おそらくNullValue
のプロパティを使うことができると思っています)。
可能な解決策#2
は色/ブラシの配列を受け取り、次いでGeometryDrawing.Brush
にマッピングする変換器を有する添付プロパティを書きます。添付されたプロパティがnullまたは色が再マッピングされていない場合にマップできない場合は、null値が返されることを保証できるので、Binding.IsNull
プロパティを使用して既定値を指定します。
それはうまくいくかもしれません。パフォーマンスの意味合いから、通常は 'DynamicResource'を使わないでください。 ...私はより多くのローカライズされたソリューションを好むでしょう。アイコンは式のデザインで作成されますが、共通のパレットから色を選択して、常に可能ではない一貫したデザインを維持しようとします。 – Dennis
@DennisRoche:サイドノート:おそらく、['x:Shared'](http://msdn.microsoft.com/en-us/library/aa970778.aspx)を' false'に設定してそれ以外の場合は同じインスタンスがすべての場所で使用されます。 –
ありがとう@HB。利用可能なオプションについては引き続き調査します。まだ 'DynamicResource'を使って100%売れていません。 – Dennis