是否可以将边距或填充的一边设置为不覆盖默认样式?

时间:2011-05-11 07:11:32

标签: .net wpf .net-4.0

我为WPF中的基本元素设置了一些默认样式,作为应用程序的默认样式,这使得按钮之类的控件都具有相似的外观,而无需在定义时手动调整,这也意味着它只需要改变一次。

我的资源字典的片段如下所示:

<ResourceDictionary
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">

    <Style TargetType="Button">
        <Setter Property="Margin" Value="4"/>
        <Setter Property="MinWidth" Value="75"/>
        <Setter Property="Padding" Value="10,2"/>
    </Style>

</ResourceDictionary>

请注意,我将所有方面的保证金设为4。这很棒,因为它提供了按钮之间的间隙,而界面不需要明确定义它。我想知道如何只需一个按钮,就可以消除一侧的间隙,而不需要为另一侧定义“4”,以便让它与父母一侧对接。

我不想做以下事情,因为它偏离了风格(即如果我以我的风格改变4到5,我也需要在这里做):

<DockPanel>
    <Button DockPanel.Dock="Left" Content="My Button" Margin="0,4,4,4" />
</DockPanel>

我只是想以某种方式设置MarginLeft,并将其他人保留为我定义的默认样式。

注意:我确实有一个解决方法,就是简单地使用一个名为“buttonLeft”的样式,它在资源字典中定义,没有左边距。

2 个答案:

答案 0 :(得分:1)

我认为您的解决方法很好:)如果您想要MarginLeft属性,您应该创建自己的按钮并添加此属性。

答案 1 :(得分:0)

意识到这一点已经得到解答,我决定在XamlPad中进行测试:

<UserControl xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
         MinWidth="500" MinHeight="200">
    <UserControl.Resources>
            <Style TargetType="Button">
            <Setter Property="Margin" Value="6"/>
            <Setter Property="MinWidth" Value="75"/>
            <Setter Property="Padding" Value="10,2"/>
        </Style>
</UserControl.Resources>
<Grid>
    <Grid.Margin>
        <Thickness Top="20" />
    </Grid.Margin>
    <Button Content="Test" />
</Grid>

然而,这似乎是将20添加到6,给你26个作为上边距,6个在左边,右边和下边。

所以,如果我想要20,我必须把14。