You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

XAML自定义六边形按钮内容不显示问题求助

问题原因

你自定义的ControlTemplate中缺少了ContentPresenter元素——WPF按钮的内容(比如你设置的"Watch Now"文本)需要通过这个控件来渲染。默认Button模板包含该元素,你重写模板时未添加,导致内容无法显示。

解决方法

修改按钮样式的ControlTemplate,添加ContentPresenter,并通过绑定关联按钮的Content、ContentTemplate等属性,同时设置对齐方式让文本居中显示在六边形上。修改后的完整样式代码如下:

<Style x:Key="HexagonButtonStyle" TargetType="Button">
    <Setter Property="Foreground" Value="Black" />
    
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="Button">
                <!-- 使用Grid包裹Polygon和ContentPresenter,确保内容在六边形上方 -->
                <Grid>
                    <Polygon x:Name="Hexagon" 
                             Points="25,0 75,0 100,43.3 75,86.6 25,86.6 0,43.3"
                             Fill="LightBlue"
                             Stroke="DarkBlue"
                             StrokeThickness="2"/>
                    <!-- 添加ContentPresenter,绑定按钮的Content相关属性 -->
                    <ContentPresenter HorizontalAlignment="Center"
                                      VerticalAlignment="Center"
                                      Content="{TemplateBinding Content}"
                                      ContentTemplate="{TemplateBinding ContentTemplate}"
                                      Foreground="{TemplateBinding Foreground}"/>
                </Grid>
                <ControlTemplate.Triggers>
                    <Trigger Property="IsMouseOver" Value="True">
                        <Setter  TargetName="Hexagon" Property="Fill" Value="LightSkyBlue"/>
                        <Setter  Property="Cursor" Value="Hand"/>
                    </Trigger>
                    <Trigger Property="IsPressed" Value="True">
                        <Setter TargetName="Hexagon" Property="Stroke" Value="Red"/>
                    </Trigger>
                </ControlTemplate.Triggers>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>
关键说明
  • 用Grid容器同时承载六边形和内容呈现器,这样内容会叠加在六边形上方。
  • ContentPresenter通过TemplateBinding绑定按钮的Content、ContentTemplate和Foreground属性,确保按钮的内容设置能生效,且文本颜色遵循按钮的Foreground设置。
  • 设置HorizontalAlignment="Center"和VerticalAlignment="Center"让文本居中显示在六边形内。

修改后,按钮的"Watch Now"文本就会正常显示在六边形按钮的中央了。

内容的提问来源于stack exchange,提问作者Javanto

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 12:01:20