2013-01-24 95 views
0

我想在整个视图中的所有控件中设置一致的边距。我目前使用XAML:定义默认布局属性

<Window.Resources> 
    <Thickness x:Key="ConsistentMargins">0,10,0,0</Thickness> 
</Window.Resources> 

<!-- ... --> 
<!-- ... --> 
<!-- ... --> 

<MyControl1 Margin="{StaticResource ConsistentMargins}"> 
<MyControl2 Margin="{StaticResource ConsistentMargins}"> 
<MyControl3 Margin="{StaticResource ConsistentMargins}"> 

有没有一种方法来设置控件的默认布局样式,以避免上面显示的上述重复代码?

回答

1

您可以使用TargetType创建自己的样式,并且此样式将分配给您在TargetType中指定的所有类型对象。但在这种情况下,您创建的样式仅适用于特定类型的对象,但不适用于派生类型。

E.g.你可以像这样所有的按钮创建样式:

<Style TargetType="{x:Type Button}"> 
    <Setter Property="Margin" Value="0,10,0,0" /> 
</Style> 

我认为这是有道理的,风格不从基类应用,因为我想要说“我所有的按钮看起来像......”,但我想不要说“一切看起来像......”。

+0

我认为有很多情况下,你还是要说,“一切都看起来像“,任何控制的边际都是一个很好的布局示例。你知道一种方法来处理基类型,所以我可以将TargetType设置为'x:Type Control'? – sammarcow

0

您可以创建一个基本的默认风格,也许FrameworkElement的,并让其他元素类型的默认样式扩展基本风格:

<Window.Resources> 
    <Style TargetType="FrameworkElement"> 
     <Setter Property="Margin" Value="0,10,0,0"/> 
    </Style> 
    <Style TargetType="TextBlock" BasedOn="{StaticResource {x:Type FrameworkElement}}"/> 
    <Style TargetType="TextBox" BasedOn="{StaticResource {x:Type FrameworkElement}}"/> 
    <Style TargetType="Label" BasedOn="{StaticResource {x:Type FrameworkElement}}"/> 
    ... 
</Window.Resources> 
+0

这会为许多控件添加相同数量的重复代码。 – sammarcow

+1

不,它没有。我们在这里讨论*默认样式*。您可以为每个*类型的控件定义一次,而不是每个*实例*,如您的示例中所示。例如,您可以为TextBlocks定义一次默认样式,然后将样式应用于每个TextBlock。这实际上是一个很大的区别,除非你有一个奇怪的用户界面,每次只使用一种控制类型。 – Clemens

+0

对不起,我误解了。这很有帮助,谢谢。 – sammarcow