2013-05-13 59 views
0

<Window.Resources>,我已經定義了以下樣式:風格突破:重點增加

<Style TargetType="TextBox"> 
     <Setter Property="Height" Value="22" /> 
     <Setter Property="Width" Value="125" /> 
     <Setter Property="HorizontalAlignment" Value="Left" /> 
     <Setter Property="VerticalAlignment" Value="Top" /> 
     <Setter Property="Foreground" Value="Black" /> 
     <Setter Property="Background" Value="WhiteSmoke" /> 
    </Style> 

它正常工作,直到我需要繼承風格上的另一個風格

<Style BasedOn="{StaticResource TextBoxStyle}" TargetType="{x:Type PasswordBox}"> 

這意味着我需要將x:Key=TextBoxStyle添加到上面的文本框樣式中。
但是,當我這樣做時,文本框的樣式完全打破。
我試着做同樣的按鈕樣式,併發生同樣的事情,如果我添加一個鍵的風格將破壞。

我想到的唯一解決方案是單獨添加樣式到元素,但這正是我所不想做的。

回答

2

不,你不需要添加x:Key引用它:

<Style BasedOn="{StaticResource {x:Type TextBox}}" TargetType="{x:Type PasswordBox}"> 
+0

我明白了。儘管如此,我仍然很好奇,爲什麼當我添加一個鍵時,風格會中斷? – Edwin 2013-05-13 04:25:33

+1

@Edwin:如果你沒有指定'x:Key',它不會中斷,這個鍵被設置爲控件的類型,這使得它適用於該類型的所有控件,你也可以手動執行此操作。如果你指定另一個鍵,它不會自動應用。 – 2013-05-13 04:26:42

0

小康社會提供更好的可理解性和修的,我寧願以下辦法。恕我直言,另一名程序員可以更好地進入代碼,如果隱含減少到最低限度。

<Style x:Key="BasicTextBoxStyle" TargetType="{x:Type TextBox}"> 
    <!--some settings here--> 
</Style> 

<!--Declare BasicTextBoxStyle as default style for TextBoxes--> 
<Style BasedOn="{StaticResource BasicTextBoxStyle}" TargetType="{x:Type TextBox}"/> 

<!--Create some special style based on the basic style--> 
<Style BasedOn="{StaticResource BasicTextBoxStyle}" TargetType="{x:Type PasswordBox}"> 
    <!--some more specific settings--> 
</Style> 

只是我的兩分錢......