WPF / C #: создание стиля кнопки: текст + изображение - PullRequest
1 голос
/ 04 сентября 2010

Я просто хочу спросить, как мне поместить свое изображение (динамически) в следующий код:

<Style x:Key="ButtonStyler" TargetType="{x:Type Button}">
    <Setter Property="Background">
        <Setter.Value>
            <RadialGradientBrush>
                <RadialGradientBrush.GradientStops>
                    <GradientStopCollection>
                        <GradientStop Color="black" Offset="0" />
                        <GradientStop Color="black" Offset="1" />
                    </GradientStopCollection>
                </RadialGradientBrush.GradientStops>
            </RadialGradientBrush>
        </Setter.Value>
    </Setter>
    <Setter Property="Height" Value="40" />
    <Setter Property="Foreground" Value="white" />
    <Setter Property="Grid.Row" Value="2" />
    <Setter Property="Grid.Column" Value="3" />
    <Setter Property="Content" Value="Forgot your password?" />
    <Setter Property="ContentTemplate"
            Value="{DynamicResource myContentTemplate}" />
    <Setter Property="Margin" Value="3" />
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type Button}">
                <Grid>
                    <Rectangle x:Name="GelBackground"
                            Opacity="1"
                            RadiusX="9"
                            RadiusY="9"
                            Fill="{TemplateBinding Background}"
                            StrokeThickness="0.35">
                        <Rectangle.Stroke>
                            <LinearGradientBrush StartPoint="0,0"
                                    EndPoint="0,1">
                                <LinearGradientBrush.GradientStops>
                                    <GradientStopCollection>
                                        <GradientStop Color="white"
                                                Offset="0" />
                                        <GradientStop Color="#666666"
                                                Offset="1" />
                                    </GradientStopCollection>
                                </LinearGradientBrush.GradientStops>
                            </LinearGradientBrush>
                        </Rectangle.Stroke>
                    </Rectangle>
                    <Rectangle x:Name="GelShine"
                Margin="2,2,2,0"
                VerticalAlignment="top"
                RadiusX="6"
                RadiusY="6"
                Opacity="1"
                Stroke="transparent"
                Height="15px">
                    <Rectangle.Fill>
                        <LinearGradientBrush StartPoint="0,0" EndPoint="0,1">
                            <LinearGradientBrush.GradientStops>
                                <GradientStopCollection>
                                    <GradientStop Color="#ccffffff" 
                                        Offset="0" />
                                    <GradientStop Color="transparent"
                                        Offset="1" />
                                    </GradientStopCollection>
                                </LinearGradientBrush.GradientStops>
                            </LinearGradientBrush>
                        </Rectangle.Fill>
                    </Rectangle>
                    <ContentPresenter x:Name="GelButtonContent"
                            VerticalAlignment="center"
                            HorizontalAlignment="center"
                            Content="{TemplateBinding Content}" />
                </Grid>
                <ControlTemplate.Triggers>
                    <Trigger Property="IsMouseOver" Value="true">
                        <Setter Property="Fill" TargetName="GelBackground">
                            <Setter.Value>
                                <RadialGradientBrush>
                                    <RadialGradientBrush.GradientStops>
                                        <GradientStopCollection>
                                            <GradientStop Color="lime"
                                                    Offset="0" />
                                            <GradientStop Color="DarkGreen"
                                                    Offset="1" />
                                        </GradientStopCollection>
                                    </RadialGradientBrush.GradientStops>
                                </RadialGradientBrush>
                            </Setter.Value>
                        </Setter>
                    </Trigger>
                    <Trigger Property="IsPressed" Value="true">
                        <Setter Property="Fill" TargetName="GelBackground">
                            <Setter.Value>
                                <RadialGradientBrush>
                                    <RadialGradientBrush.GradientStops>
                                        <GradientStopCollection>
                                            <GradientStop Color="#ffcc00"
                                                    Offset="0" />
                                            <GradientStop Color="#cc9900"
                                                    Offset="1" />
                                        </GradientStopCollection>
                                    </RadialGradientBrush.GradientStops>
                                </RadialGradientBrush>
                            </Setter.Value>
                        </Setter>
                    </Trigger>
                </ControlTemplate.Triggers>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
    <Style.Triggers>
        <Trigger Property="IsMouseOver" Value="true">
            <Setter Property="Foreground" Value="black " />
        </Trigger>
        <Trigger Property="IsPressed" Value="true">
            <Setter Property="Foreground" Value="black " />
        </Trigger>
    </Style.Triggers>
</Style>

Я планирую указать место назначения файла изображения в своем коде (C #). Для вывода кнопка WPF может отображать как текст, так и изображение (помещается в правой части текста)

Есть предложения?

Ответы [ 2 ]

4 голосов
/ 04 сентября 2010

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

<Button Style="{StaticResource ButtonStyler}">
    <StackPanel Orientation="Horizontal">
        <Image Source="..." />
        <TextBlock Text="..." />
    </StackPanel>
</Button>
1 голос
/ 04 сентября 2010

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

Создание кнопки изображения + текста с шаблоном управления?

...