2010-09-01 73 views
3

我無法擴展我在Windows字典中定義的樣式之一。獨自一人,它似乎將預期的風格應用於我的控件。但是,如果嘗試在我的一個userControls中使用basedOn屬性來擴展樣式,它將簡單地覆蓋主要樣式和所有基礎樣式消失。這裏有一個例子:如何從資源字典繼承/擴展樣式?

在資源字典,命名dict1.xaml:

<Style TargetType="{x:Type Button}"> 
    <Setter Property="Background" Value="Pink"/> 
</Style> 

在主window.xaml:

<Window.Resources> 
    <ResourceDictionary Source="dict1.xaml"/> 
</Window.Resources> 

在叫userControl1.xaml用戶控件:

<UserControl.Resources> 
    <Style BasedOn="{StaticResource {x:Type Button}}" 
      TargetType="{x:Type Button}"> 
     <Setter Property="FontWeight" Value="Bold"/> 
    </Style> 
</UserControl.Resources> 

用戶控件中的樣式僅覆蓋資源字典中的樣式,字體爲Bo LD。如果我刪除用戶控件中的樣式,字典中的樣式將啓動並且背景變爲粉紅色。我想要兩個。

任何想法我在這裏做錯了嗎?

謝謝。

回答

1

您可能需要將字典添加到UserControl資源,或將其添加到App.XAML資源。

就這樣,UserControl無法解析該StaticResource - 它在UserControl的範圍內,而不是窗口,如果有意義的話。

+0

是的,這是有道理的。當你說把它添加到app.xaml會達到什麼目的?是不是將它添加到Windows.Resources相同的東西?順便說一句,app.xaml文件不會在我的設置中使用,因爲窗體窗體是從一個winforms應用程序打開的,但這是另一個問題。 – HAdes 2010-09-01 16:59:45

+0

@HAdes在App.XAML中添加它可以在整個應用程序中使用,因此您可以從任何地方引用其資源。 – Jay 2010-09-01 17:59:06

+0

因此,看起來我所追求的是不可能的,唯一的解決方法就是按照您的建議進行操作,並將樣式複製到用戶控件中。我不喜歡這樣,因爲它不必要地複製樣式,並且意味着對樣式的任何修改都需要在兩者中進行。但我想現在它是有效的。乾杯。 – HAdes 2010-09-03 14:19:00