Использовать изображение в качестве маски значка кнопки WPF? - PullRequest
7 голосов
/ 26 апреля 2011

Я хотел бы знать, возможно ли сделать следующее:

  • создать черно-белое изображение, скажем, собаки
  • добавить изображение к кнопке в качестве маски
  • изменить стиль с помощью триггеров (данных), например, инвалид - собака серого цвета, «загрузка» - собака красного цвета, «готовая», собака желтого цвета и т. д.

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

dog buttons

Ответы [ 3 ]

10 голосов
/ 27 апреля 2011

После 2 часов поиска в Google вот ответ

<Window x:Class="IconTest.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
    <Window.Resources>
        <!-- button style -->
        <Style x:Key="ToolButton" TargetType="Button">
            <Setter Property="OverridesDefaultStyle" Value="True"/>
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="Button">
                        <Border Width="16" Height="16" Background="#ffbbbbbb">
                            <Rectangle Name="rect" Fill="Black" OpacityMask="{TemplateBinding Content}"/>
                        </Border>
                        <ControlTemplate.Triggers>
                            <Trigger Property="IsMouseOver" Value="True">
                                <Setter TargetName="rect" Property="Fill" Value="Green" />
                            </Trigger>
                            <Trigger Property="IsPressed" Value="True">
                                <Setter TargetName="rect" Property="Fill" Value="Yellow" />
                            </Trigger>
                        </ControlTemplate.Triggers>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>

    </Window.Resources>
    <Grid>
        <Button Width="16" Height="16" Style="{StaticResource ToolButton}">
            <ImageBrush ImageSource="/test.png"/>
        </Button>
    </Grid>
</Window>
2 голосов
/ 26 апреля 2011

Вы можете определить OpacityMask для Button.Я полагаю, что вы сможете добавить триггеры (если они вам нужны), чтобы изменить Background кнопки.

enter image description here

Образец:

<Button Height="100" Width="100" Background="Green">
    <Button.OpacityMask>
    <DrawingBrush AlignmentX="Left" AlignmentY="Top">
        <DrawingBrush.Drawing>
        <DrawingGroup>
            <GeometryDrawing Brush="#33000000">
            <GeometryDrawing.Geometry>
                <RectangleGeometry Rect="0,0,40,40" />
            </GeometryDrawing.Geometry>
            </GeometryDrawing>
            <GeometryDrawing Brush="#FF000000">
            <GeometryDrawing.Geometry>
                <RectangleGeometry Rect="10,10,20,20">
                <RectangleGeometry.Transform>
                    <RotateTransform Angle="45" CenterX="20" CenterY="20" />
                </RectangleGeometry.Transform>
                </RectangleGeometry>
            </GeometryDrawing.Geometry>
            </GeometryDrawing>
        </DrawingGroup>
        </DrawingBrush.Drawing>
    </DrawingBrush>
    </Button.OpacityMask>
</Button>
0 голосов
/ 26 апреля 2011

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

См. Пример кнопки Ellipse на этой странице. Шаблон управления

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

Приветствия,

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