2011-03-03 125 views
2

在Silverlight4中有這個非常簡單的xaml樣式問題。明確樣式覆蓋的隱式xaml樣式

當我通過顯式樣式在元素上設置樣式時,我的隱式樣式被刪除了? 我創建了一個簡單的例子來說明這個問題。

<UserControl.Resources> 
    <Style TargetType="TextBox"> 
     <Setter Property="Background" Value="red"/> 
    </Style> 

    <Style TargetType="FrameworkElement" x:Key="test"> 
     <Setter Property="Margin" Value="20"/> 
    </Style> 

</UserControl.Resources> 

<Grid x:Name="LayoutRoot" Background="White"> 
    <TextBox Style="{StaticResource test}" Height="40" Width="120"> </TextBox> 
</Grid> 
</UserControl> 

所以,當我刪除Style="{StaticResource test} 隱式的再次應用。

注意:這是過於簡單的例子。因此將邊距移動到texbox樣式不是一種選擇,因爲實際項目包含較大的xaml樣式。

有人知道解決方案還是可以確認這是不可能的?

Thx提前!

回答

2

查看BasedOn樣式屬性。這將允許您從基礎樣式繼承,以使用基礎屬性並添加一些更改。

現在,BasedOn存在一個問題 - 它不能與隱式樣式一起使用。但是,這很容易解決。本文圍繞演示工作,也將解釋支持算法FMP屬性好一點:

Silverlight how-to: Inherit from an Implicit Style

+0

嘿,THX因爲我知道如何使用支持算法FMP但它不是非常有用在這種情況下,因爲你可以在響應」 t基於一個文本框的框架樣式。在最終的代碼texbox將包括一個自定義模板... – Kris 2011-03-04 09:15:00

+0

我猜你不想基於FrameworkElement風格的TextBox風格? – grimus 2011-03-04 16:52:17

+0

不,因爲我想在某些情況下將樣式添加到文本框。這可能不是很清楚,因爲我簡化了上面的例子,最後一個更復雜,需要正確的順序。 – Kris 2011-03-04 18:59:05