【问题标题】:Is it possible to set one side of Margin or Padding as to not override the default style?是否可以将边距或填充的一侧设置为不覆盖默认样式?
【发布时间】:2011-05-11 07:11:32
【问题描述】:

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

我的资源字典的 sn-p 如下所示:

<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”命名样式,没有左边距。

【问题讨论】:

    标签: .net wpf .net-4.0


    【解决方案1】:

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

    【讨论】:

    • 我想我可能会得到这样的答案,谢谢blindmeis :) 我在想我可以让 WPF 表现得更像 CSS :P 我确实有一个 baseButton 样式,我的默认样式也基于on 然后分别为leftButtonrightButton 设置两个命名样式。感谢您的帖子:)
    【解决方案2】:

    意识到这个问题已经得到解答,我还是决定在 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 个。

    【讨论】:

    • 没错,因为网格包含按钮,它是与按钮组合的网格的厚度。从理论上讲,您可以将按钮包装在Border 中,将边框Margin 属性绑定到内部按钮Margin 属性,并结合类型转换器来否定按钮的左边距以有效地重新定位它。这可能是一个可行的解决方案,尽管它取决于哪个工作较少:) 第二个可能是开始工作较少。
    • 啊,是的,我怎么错过了!为此 +1,
    猜你喜欢
    • 2015-08-06
    • 2023-01-22
    • 1970-01-01
    • 2011-11-24
    • 2012-07-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多