Giả sử rằng tôi có một số DrawingBrush
có ba màu được mã hóa cứng, tức là đường viền, tiền cảnh và nền.Làm thế nào để remap màu sắc trong một 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}" />
Câu hỏi
Điều gì sẽ là phương pháp tốt nhất để có thể thay đổi các màu sắc từ cha mẹ Rectangle
, nhưng vẫn có một dự phòng mặc định?
Như tôi đã viết câu hỏi này, tôi đã nghĩ đến hai giải pháp khả thi ...
Giải pháp # 1
Sử dụng một RelativeSource
ràng buộc để kết nối mỗi tài sản tương đương của họ, ví dụ {Binding Path=BorderBrush, RelativeSource={RelativeSource AncestorType={x:type Rectangle}}
tuy nhiên:
Rectangle
là mộtShape
không cóBorderBrush
tài sản;- Tôi không thể cung cấp giá trị mặc định. Chỉ định
FallbackValue
trong liên kết sẽ không hoạt động vì liên kết sẽ giải quyết và lấy giá trị mặc định của nó. (Chỉnh sửa: Khi tôi viết điều này, tôi nghĩ rằng tôi có thể sử dụng thuộc tínhNullValue
).
Giải pháp # 2
Viết một tài sản gắn liền mà phải mất một mảng màu sắc/bàn chải và sau đó có một bộ chuyển đổi để ánh xạ nó vào GeometryDrawing.Brush
. Cung cấp một giá trị mặc định bằng cách sử dụng thuộc tính Binding.IsNull
vì tôi có thể đảm bảo một giá trị null được trả về nếu nó không thể ánh xạ nếu thuộc tính đính kèm là null hoặc màu đó không được ánh xạ lại.
Điều đó có thể hoạt động; thường tránh sử dụng 'DynamicResource' do tác động của nó. ... Tôi thích một giải pháp được bản địa hóa hơn, nơi các màu mặc định được khai báo gần việc sử dụng chúng. Các biểu tượng được tạo ra trong một thiết kế biểu thức và trong khi tôi cố gắng để chọn màu sắc từ một bảng màu chung để giữ một thiết kế nhất quán mà không phải là luôn luôn có thể. – Dennis
@DennisRoche: Một lưu ý phụ: Có thể bạn sẽ muốn đặt ['x: Shared'] (http://msdn.microsoft.com/en-us/library/aa970778.aspx) thành' false' trên bàn chải nếu không cùng một ví dụ được sử dụng ở khắp mọi nơi. –
Cảm ơn @ H.B. Tôi sẽ tiếp tục điều tra các tùy chọn có sẵn. Vẫn chưa được bán 100% khi sử dụng 'DynamicResource'. – Dennis