为啥 System.Windows.Controls.Button 总是有 10px 的填充?

Posted

技术标签:

【中文标题】为啥 System.Windows.Controls.Button 总是有 10px 的填充?【英文标题】:Why does System.Windows.Controls.Button always have a padding of 10px?为什么 System.Windows.Controls.Button 总是有 10px 的填充? 【发布时间】:2011-04-26 18:48:41 【问题描述】:

见截图。带有青色边框的框是按钮,而蓝色填充是矩形。我一生都无法弄清楚如何摆脱按钮中的填充。有没有办法将矩形定位到左上角,使其接触青色边框?

谢谢。

【问题讨论】:

【参考方案1】:

您是否尝试将Rectangle 的边距设置为0

<Button x:Name="Button" BorderThickness="0" Margin="0" Padding="0" Width="96" Height="96">
    <Rectangle Fill="Blue" Margin="0" Width="96" Height="96" />
</Button>

编辑:填充必须来自按钮控件模板。尝试使用自定义模板:

<Style x:Key="MyButton" TargetType="Button">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="Button">
                <Grid>
                    <Rectangle Fill="Blue" Margin="0" Width="96" Height="96" />
                </Grid>
           </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

<Button x:Name="Button" BorderThickness="0" Margin="0" Padding="0"
    Width="96" Height="96" Style="StaticResource MyButton" />

【讨论】:

【参考方案2】:

解决方法:

绘制一个矩形并添加 onclick 到它。

【讨论】:

【参考方案3】:

我无法生成那种明显的行为,但我想知道,你会在 Windows Phone 应用程序中进行开发吗?

如果是这样,您最有可能看到的不是Padding 的结果,而是“PhoneTouchTargetOverhang”的结果。这是 App.xaml 中的 Thickness 资源,由“PhoneButtonBase”样式用于按钮的外边框Margin

这实际上是windows phone 7 应用于按钮的默认样式的副本。要替换它,您需要实际指定您的按钮使用“PhoneButtonBase”样式,然后更改“PhoneTouchTargetOverhang”的值。这将更新使用此样式的任何按钮。

【讨论】:

我在项目中的任何地方都没有看到 PhoneTouchTargetOverhang" 或 "PhoneButtonBase"。我什至 grep 了。:( "Style='PhoneButtonBase'" 无法解决。 @MTSoul:您正在开发 Windows Phone 应用程序吗?

以上是关于为啥 System.Windows.Controls.Button 总是有 10px 的填充?的主要内容,如果未能解决你的问题,请参考以下文章

BitMapImage 到字节和反转

WPF - 8.控件类

wpf里combobox怎么取数据

wpf里combobox怎么取数据

你应该同步运行方法吗?为啥或者为啥不?

为啥使用 glTranslatef?为啥不直接更改渲染坐标?