在UserControl中修改按钮的背景和边框

时间:2012-11-26 14:50:08

标签: wpf button user-controls border

我有一个自定义的用户控件,其中有一个按钮。我有各种使用此控件的XAML,但在其中一个XAML中,我希望按钮上有一个图像。这很好用,但我似乎无法让按钮的边框消失。我可以设置背景颜色,边框粗细和各种其他属性,但无论我做什么,我都无法摆脱边框。我已经查看了有关如何使用样式覆盖模板的各种SO主题,但这似乎对我没有任何帮助。下面是我试图无用的最后一段片段。

<Style TargetType="{x:Type CustomButton}" x:Key="btnnoborder">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type CustomButton}">
                <Border Background="Transparent">
                    <ContentPresenter/>
                </Border>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

修改

我附上了我在测试这些片段时所看到的内容的小图片

Default image(常用按钮)

Viktor La Croix(使用Viktor La Croix&#39; XAML后的按钮)

2 个答案:

答案 0 :(得分:1)

我不打算回答这个,但是你跑了吗?你确定它不仅仅是在设计时吗?我用你的风格,它工作正常。运行时没有边框。在设计时我看到按钮本身的边框和该按钮内的图像。

enter image description here

我的自定义风格:

    <UserControl.Resources>
    <Style x:Key="ButtonStyle2" TargetType="{x:Type Button}">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type Button}">
                    <Grid>
                        <Rectangle/>
                        <ContentPresenter HorizontalAlignment="Left" RecognizesAccessKey="True" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" Margin="11,7,0,9"/>
                    </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>
</UserControl.Resources>

    <Button Style="{StaticResource ButtonStyle2}" Height="30" HorizontalAlignment="Left" Margin="782,211,0,0" Name="button5" VerticalAlignment="Top" Width="129">
        <Image Source="image.png"/>
    </Button>

使用您的自定义样式,它看起来像这样:

enter image description here

但它只是在设计时。在运行时没有边框。

修改

如果有边框画笔。它不在那种按钮样式中。

答案 1 :(得分:0)

要改进我发布的评论,请将BorderBrushBorderThickness属性设置为TemplateBinding值:

<Style TargetType="{x:Type CustomButton}" x:Key="btnnoborder">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type CustomButton}">
                <Border Background="Transparent" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}">
                    <ContentPresenter/>
                </Border>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

这将允许您的按钮继承声明它的实例中的值:

<local:CustomButton BorderBrush="Transparent" BorderThickness="0" Content="Click Me!"/>