Üç renk kodlu, yani kenarlık, ön plan ve arka plana sahip bir DrawingBrush
ürünüm olduğunu varsayalım.Bir DrawingBrush'ta renkleri nasıl değiştirebilirim?
<!-- 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}" />
Soru
Ne iyi yaklaşım ebeveyn Rectangle
bu renklerini değiştirmek, henüz hala varsayılan bir yedeği var edebilmek için olurdu? Bir RelativeSource
eşdeğer mülkiyet, örneğin her bağlamak için bağlayıcı kullanarak Bu soruyu yazarken, ben iki olası çözümlere düşündüm
...
Olası Çözüm 1.
{Binding Path=BorderBrush, RelativeSource={RelativeSource AncestorType={x:type Rectangle}}
ancak:
Rectangle
birShape
BorderBrush
özelliklere sahip değildir olmak;- Varsayılan değer sağlayamadım. Ciltlemede
FallbackValue
belirtilmesi, ciltlemenin çözüleceği ve varsayılan değeri alacağı için çalışmaz. (Düzelt: Bunu yazarken,NullValue
özelliğini kullanabileceğimi düşünüyorum).
Olası Çözüm 2.
renkler/fırçaların dizisini alır ve daha sonra GeometryDrawing.Brush
eşlemek için bir dönüştürücü iliştirilmiş bir özellik yazın. Eklenen özelliğin boş olup olmadığına veya bu rengin yeniden eşlenmediğine eşleme yapamıyorsa boş değer döndürdüğünden, Binding.IsNull
özelliğini kullanarak varsayılan bir değer girin.
Bu işe yarayabilir; Genellikle performans sonuçları nedeniyle 'DynamicResource' kullanmaktan kaçının. ... Varsayılan renklerin kullanımının yakın olduğu bildirilen daha yerelleştirilmiş bir çözümü tercih ederim. Simgeler bir İfade Tasarımında oluşturulur ve her zaman mümkün olmayan tutarlı bir tasarımı korumak için ortak bir paletten renkleri almaya çalışıyorum. – Dennis
@DennisRoche: Bir yan not: Muhtemelen ['x: Shared'] 'i (http://msdn.microsoft.com/en-us/library/aa970778.aspx)' false' olarak ayarlamak isteyeceksiniz. aksi takdirde aynı örnek her yerde kullanılır. –
Teşekkürler @ H.B. Mevcut seçenekleri araştırmaya devam edeceğim. Hala DynamicResource' kullanılarak satılan% 100 değil. – Dennis