如何为所有我的WPF窗口上的所有控件设置默认边距?

如何为所有我的WPF窗口上的所有控件设置默认边距?,wpf,window,controls,margin,Wpf,Window,Controls,Margin,我想在我所有窗口上设置的所有控件的默认边距为3,并且能够在少数项目上覆盖此值 我见过一些方法,比如做样式,但是我需要对所有的东西进行样式化,我更喜欢所有控件都可以一起做的事情。我见过其他类似MarginSetter的东西,但看起来它不会穿过子面板。我只希望在我放在窗口的控件上留有边距,与视觉树的边框或其他内容无关 在我看来这是很基本的东西。有什么想法吗 提前感谢。我能找到的唯一解决方案是将样式应用于您在窗口上使用的每个控件(我知道这不是您想要的)。如果您只使用几种不同的控件类型,那么这样做并不太

我想在我所有窗口上设置的所有控件的默认边距为3,并且能够在少数项目上覆盖此值

我见过一些方法,比如做样式,但是我需要对所有的东西进行样式化,我更喜欢所有控件都可以一起做的事情。我见过其他类似MarginSetter的东西,但看起来它不会穿过子面板。我只希望在我放在窗口的控件上留有边距,与视觉树的边框或其他内容无关

在我看来这是很基本的东西。有什么想法吗


提前感谢。

我能找到的唯一解决方案是将样式应用于您在窗口上使用的每个控件(我知道这不是您想要的)。如果您只使用几种不同的控件类型,那么这样做并不太麻烦:

<Window x:Class="WpfApplication7.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
    <Window.Resources>
        <!-- One style for each *type* of control on the window -->
        <Style TargetType="TextBox">
            <Setter Property="Margin" Value="10"/>
        </Style>
        <Style TargetType="TextBlock">
            <Setter Property="Margin" Value="10"/>
        </Style>
    </Window.Resources>
    <StackPanel>
        <TextBox Text="TextBox"/>
        <TextBlock Text="TextBlock"/>
    </StackPanel>
</Window>


祝您好运…

您可以通过参考参考资料中定义的“厚度”链接所有的页边距属性。我只是在一个项目中做的

<!-- somwhere in a resource-->
<Thickness  x:Key="CommonMargin" Left="0" Right="14" Top="6" Bottom="0" />

<!-- Inside of a Style -->
<Style TargetType="{x:Type Control}" x:Key="MyStyle">
     <Setter Property="Margin" Value="{StaticResource CommonMargin}" />
</Style>
<!-- Then call the style in a control -->
<Button Style="{StaticResource MyStyle}" />

<!-- Or directly on a Control -->
<Button Margin="{StaticResource CommonMargin}" />


对我来说,关键是要弄清楚边缘是由“厚度”定义的。让我知道这是否足够清楚,或者您是否需要我将其放在一个完全工作的XAML示例中。

您可以在按钮样式中应用边距。当您在StackPanel中使用此样式的按钮时,wpf将应用所需的间距。 例如 在resourcedictionary或其他工具中定义:

 <Style x:Key="myButtonStyle"  TargetType="{x:Type Button}">
<Setter Property="Margin" Value="10"/>
....
</Style>

....
然后在yor StackPanel xaml定义中:

<StackPanel>
   <Border BorderThickness="0"/>
   <Button x:Name="VertBut1" Style="{StaticResource myButtonStyle}"      Content="Button1"/>
   <Button x:Name="VertBut2" Style="{StaticResource myButtonStyle}"      Content="Button2"/>
   <Button x:Name="VertBut3" Style="{StaticResource myButtonStyle}"      Content="Button3"/>
</StackPanel>

问候
Georgi

边框是控件。使用样式有什么困难?如果您使用Wpf,请查看隐式样式—可以应用于特定类型的样式(SL5也应该有这些样式)。@Dmitry:问题是,我需要为我使用的任何人创建的每个控件创建一个样式。这看起来不是一个很好的解决方案,因为所有控件都有基类,并且使用继承来避免这类事情(编程时重复的东西总是错误的)你读过我说的吗?使用隐式样式-它们应用于类型而不是实例级别。@Dmitry:我说的是为直到今天或将来创建的每种类型的控件创建样式。我明白了,样式是实现所需的最简单也是最正确的方法。嗯,问题是Windows窗体有一个默认的边距值。。。每件事都需要一个保证金。我正在寻找一个通用的解决方案,将其应用于我的所有应用程序。看起来我必须为每个控件创建一个样式。。。这可能会伤害我,因为我需要永远维护这个该死的东西。是的,这绝对是WPF的一个缺点。如果我找到一个更好的解决方案,我会在这里发布。是否可以将样式添加到stackpanel,并将该样式向下传播到所有子元素?