2013-01-24 123 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