Какую конструкцию использовать для многоразовой, перекрашиваемой иконки в XAML? - PullRequest
1 голос
/ 15 октября 2010

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

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

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

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

Ответы [ 3 ]

3 голосов
/ 15 октября 2010

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

<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" />
2 голосов
/ 15 октября 2010

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

<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 голосов
/ 15 октября 2010

В дополнение к другим ответам, стоит отметить, что что-то вроде 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}" ..... />

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...