Powiedzmy, że mam DrawingBrush
który ma trzy kolory ciężko kodowanych, czyli granicy, na pierwszy plan i tło.Jak zmapować kolory w 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}" />
Pytanie
Jaki byłby najlepszym rozwiązaniem, aby móc zmienić te kolory z rodzicem Rectangle
, ale nadal posiada domyślny krok wstecz?
Kiedy piszę to pytanie, myślałem do dwóch możliwych rozwiązań ...
Możliwe rozwiązanie nr 1
Używanie RelativeSource
wiązania się połączyć każdy z ich własności, np równoważnego {Binding Path=BorderBrush, RelativeSource={RelativeSource AncestorType={x:type Rectangle}}
jednakże:
Rectangle
byciaShape
nie posiadaBorderBrush
właściwości;- Nie mogłem podać wartości domyślnej. Określenie powiązania nie będzie działało, ponieważ powiązanie zostanie rozwiązane i przyjmie wartość domyślną. (Edit: Kiedy piszę te słowa, myślę, że mógłbym użyć właściwości
NullValue
).
Możliwe rozwiązanie nr 2
Napisz załączony właściwość, która pobiera tablicę kolorów/szczotek i wtedy konwerter mapować go do GeometryDrawing.Brush
. Podaj wartość domyślną za pomocą właściwości Binding.IsNull
, ponieważ mogę zagwarantować, że zwracana jest wartość pusta, jeśli nie można odwzorować, jeśli załączona właściwość ma wartość null lub że nie ma odwzorowania koloru.
To może zadziałać; zwykle unikaj używania 'DynamicResource' z powodu jego wpływu na wydajność. ... Wolałbym bardziej zlokalizowane rozwiązanie, w którym zadeklarowane są domyślne kolory. Ikony są tworzone w projekcie Expression Design i próbuję wybierać kolory ze wspólnej palety, aby zachować spójny projekt, który nie zawsze jest możliwy. – Dennis
@DennisRoche: Uwaga dodatkowa: prawdopodobnie będziesz chciał ustawić ['x: Shared'] (http://msdn.microsoft.com/en-us/library/aa970778.aspx) na" false "na brush inaczej to samo wystąpienie jest używane wszędzie. –
Dzięki @ H.B. Będę nadal badać dostępne opcje. Nadal nie w 100% sprzedawane przy użyciu 'DynamicResource'. – Dennis