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
相关产品推荐
相关产品推荐

