更改WPF按钮的形状而不更改其他样式

时间:2012-02-02 19:43:07

标签: .net wpf

我想将WPF按钮的形状从默认的圆形矩形更改为另一种形状(例如,箭头),但我想保留其余样式 - 填充颜色,边框颜色,悬停状态,我希望按钮具有与所有其他常规按钮相同的样式(我相信这取决于Windows的版本,系统主题颜色等等,所以我不能从头开始重新创建按钮样式并且硬编码正确的颜色)。

有没有办法做到这一点?

3 个答案:

答案 0 :(得分:1)

您应该能够继承正常的按钮控件。然后,您可以使用自定义形状自定义子类按钮,但是将继承所有其他属性。这将允许您更改按钮的形状,而不是其他任何内容。

如果您有Blend,这是创建自定义按钮的好资源:
http://msdn.microsoft.com/en-us/library/bb613598.aspx

答案 1 :(得分:0)

制作default Button Template的副本,只需将默认面板更改为您自己的自定义形状。

对于按钮,您似乎需要将Border替换为定义箭头的Path之类的内容。

由于Path没有内容,您可能必须将形状和内容放在另一个允许对象重叠的面板中,例如网格。

所以你的最终结果看起来像这样

<Grid>
    <Path />
    <ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center" />
</Grid>

而不是默认

<Button>
    <ContentPresenter />
</Button>

答案 2 :(得分:0)

如果要继承Button的默认系统颜色/样式,可以在按钮TemplateBinding中使用Template。例如,如果您想创建一个与系统背景颜色相同的自定义形状按钮,则可以使用以下内容:

<Button>
    <Button.Template>
        <ControlTemplate TargetType="Button">
            <Grid>
                <!-- circle to have inherited colour -->
                <Ellipse Fill="{TemplateBinding Background}" Height="50" Width="50" />
                <ContentPresenter />
            </Grid>
        </ControlTemplate>
    </Button.Template>
</Button>

然后Ellipse会继承Button的背景颜色,但它会被设置。