2010-10-15 2 views
1

Я нахожусь в разработке небольшого приложения на основе WPF, и я бы хотел определить некоторые часто используемые векторные значки в XAML в форме, которая может использоваться в нескольких элементах управления на одном представлении и перекрашиваться посредством привязки.Какую конструкцию использовать для многоразового, перекрашиваемого значка в XAML?

Например, я хочу, чтобы маленькая перекрестная значка менялась от черного к серому вместе с текстом в отключенной кнопке (т. Е. С помощью кисти переднего плана). Значок устанавливается на кнопке с помощью (ab) с использованием свойства Tag.

В настоящее время я использую DrawingBrushes на основе GeometryBrush, которые затем используются для заполнения Rectangles, но здесь я не вижу возможности делиться цветами.

Какой способ достичь этого эффекта (предпочтительно, элегантный и простой)? =)

ответ

3

Вы можете определить геометрию пути в стиле (или в одиночку, как геометрии, если вы хотите) и использовать его в качестве StaticResource

<Style x:Key="PathStyle" TargetType="{x:Type Path}"> 
    <Setter Property="Data" Value="M0,0 L100,0 L100,100 L0,100Z" /> 
</Style> 

Тогда просто изменить цвет путей, как вы нужно.

<Path Style="{StaticResource PathStyle}" Stroke="Green" Fill="Blue" HorizontalAlignment="Left" /> 

<Path Style="{StaticResource PathStyle}" Stroke="Purple" Fill="Orange" HorizontalAlignment="Right" /> 
+0

Я думаю, что OP хочет иметь возможность делиться цветами как ресурсом ... не уверен, что это отвечает на его вопрос. –

+0

Спасибо! Это должно работать для повторного использования значков. Я уже знаю, как повторно использовать цвета, Дэн, но спасибо =) – Jens

2

Вы можете определить геометрию как ресурс, а затем использовать его в пути, который может делать все, что вы хотите, чтобы установить цвета заливки и обводки.

<Geometry x:Key="MagnifyingGlassGeometry">M 64,9C 81.67,9 96,23.3 96,41C 96,58.67 81.67,73 64,73C 46.3,73 32,58.67 32,41C 32,23.3 46.3,9 64,9 Z M 39,66L 6.5,98.5</Geometry> 

<Path Data="{StaticResource MagnifyingGlassGeometry}" Fill="{DynamicResource MyBrush}" Stroke="{Binding DataBrush}"/> 
0

В дополнении к другим ответам, стоит отметить, что нечто подобное Fill="Blue" представляет собой сокращенное нечто похожее на это:

... 
<Path.Fill> 
    <SolidColorBrush> 
     <SolidColorBrush.Color> 
      <Color>Red</Color> 
     </SolidColorBrush.Color> 
    </SolidColorBrush> 
</Path.Fill> 

Таким образом, вы можете использовать такие ресурсы, как это, тоже:

<Page.Resources> 
    <Color x:Key="FillColor">Red</Color> 
    <SolidColorBrush x:Key="FillBrush" Color="{StaticResource FillColor}" /> 
</Page.Resources> 

<Path Fill="{StaticResource FillBrush}" ..... /> 

Вы можете повторно использовать цветной ресурс на столько кистей, сколько захотите, а затем все цвета вашего приложения находятся в одном месте и легко меняются.

Смежные вопросы