c# - 使用两个图像创建按钮样式

标签 c# wpf xaml

我想创建一个包含 2 个图像和一个文本 block 的按钮。我制作了一种样式,我绑定(bind)了图像和文本 block 的值,但只有文本 block 有效。图像不出现。

我的代码:

<Style x:Key="ButtonStyle1" TargetType="{x:Type Button}">

        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type Button}">
                    <Grid Margin="-0.817,13,142.078,0" RenderTransformOrigin="0.5,0.5" Height="58" VerticalAlignment="Top">
                        <Grid.RenderTransform>
                            <TransformGroup>
                                <ScaleTransform/>
                                <SkewTransform AngleX="0.909"/>
                                <RotateTransform/>
                                <TranslateTransform X="1.484"/>
                            </TransformGroup>
                        </Grid.RenderTransform>
                        <Rectangle Stroke="Gainsboro" >
                            <Rectangle.Fill>
                                <LinearGradientBrush EndPoint="0.5,1" MappingMode="RelativeToBoundingBox" StartPoint="0.5,0">
                                    <LinearGradientBrush.RelativeTransform>
                                        <TransformGroup>
                                            <ScaleTransform CenterY="0.5" CenterX="0.5"/>
                                            <SkewTransform CenterY="0.5" CenterX="0.5"/>
                                            <RotateTransform Angle="90" CenterY="0.5" CenterX="0.5"/>
                                            <TranslateTransform/>
                                        </TransformGroup>
                                    </LinearGradientBrush.RelativeTransform>
                                    <GradientStop Color="#FFEFE9E9"/>
                                    <GradientStop Color="White" Offset="1"/>
                                    <GradientStop Color="White" Offset="0.9"/>
                                </LinearGradientBrush>
                            </Rectangle.Fill>
                        </Rectangle>
<!--the line below is not correct, I guess-->
                        <Image Height="Auto" Margin="0,18.333,19.465,17.167" Source="{TemplateBinding Background}" Stretch="Fill" VerticalAlignment="Stretch" HorizontalAlignment="Right" Width="23.841" RenderTransformOrigin="0.669,0.659" >
                            <Image.RenderTransform>
                                <TransformGroup>
                                    <ScaleTransform ScaleY="-1"/>
                                    <SkewTransform/>
                                    <RotateTransform/>
                                    <TranslateTransform Y="-7.155"/>
                                </TransformGroup>
                            </Image.RenderTransform>
                        </Image>
                        <Image HorizontalAlignment="Right" Height="55" Margin="0,0,60.254,1" Source="/Images/Untitled-6.png" Stretch="Fill" VerticalAlignment="Stretch" Width="3.497"/>
                        <Image HorizontalAlignment="Right" Margin="0,14,87.232,14" Source="/Images/Untitled-4.png" Stretch="Fill" Width="28.603"/>
                        <TextBlock Text="{TemplateBinding Content}" Margin="8,14,131.623,14" TextAlignment="Center" FontFamily="Open Sans" FontSize="22"/>
                    </Grid>
                    <ControlTemplate.Triggers>
                        <Trigger Property="IsFocused" Value="True"/>
                        <Trigger Property="IsDefaulted" Value="True"/>
                        <Trigger Property="IsMouseOver" Value="True"/>
                        <Trigger Property="IsPressed" Value="True"/>
                        <Trigger Property="IsEnabled" Value="False"/>
                    </ControlTemplate.Triggers>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>

在我的 XAML 用户控件中:

 <Button Name="bbb" Style="{StaticResource ButtonStyle1}" Content="Sterge"  >
        <Button.Background>
            <ImageBrush ImageSource="/Images/Untitled-5.png"/>
        </Button.Background>

    </Button>

最佳答案

您正在尝试将 Image.Source 设置为模板父级(类型为 Brush)的 Background 属性,所以那是行不通的。通常,您可以按以下格式将文本输入到 Image.Source 属性中:

<Image Source="/ApplicationName;component/Images/ImageName.png" />

为了从 ControlTemplate 外部输入 Image.Source,您可能需要扩展 Button 控制并向其添加 ImageSource DependencyProperty

关于c# - 使用两个图像创建按钮样式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19566119/

相关文章:

c# - 在 WPF 中手动添加对 TextBox 的引用

c# DataContractSerializer 问题

WPF 图像,改变像素的颜色

c# - 获取导致异常的表单名称、方法名称和更多详细信息

c# - 如何让 Entity Framework Code First 和可为空的外键属性工作?

c# - WPF - 单击按钮时设置焦点 - 无代码隐藏

c# - 在 MVVM 中实现文本框失去焦点事件

c# - 设置绑定(bind)的边距

c# - 如何在网格中放置 XAML 用户控件

c# - 需要在没有 UAC 弹出窗口的情况下提升权限