2013-02-13 127 views
7

我有一個按鈕控制,在資源字典中的資源如下:綁定到ContentControl中的內容屬性WPF控件在資源字典中用作多個WPF Windows中的StaticResource?

<!--ButtonResources.xaml file--> 
<ResourceDictionary 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> 
    <Button x:Key="buttonResource" Content={Binding BoundText}/> 
</ResourceDictionary> 
<!--ButtonResources.xaml file--> 

我現在用這個按鈕上方控制控制2不同的Windows的.xaml文件,其中每個Window有自己的DataContext,因此每個窗口應該顯示Content上面的按鈕控制基於它的ViewModel'sBoundTextBoundText屬性值如下爲每個窗口。

<Window x:Class="TestClass1" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> 
    <Window.Resources> 
     <ResourceDictionary> 
      <ResourceDictionary.MergedDictionaries> 
       <ResourceDictionary Source="ButtonResources.xaml"/> 
      </ResourceDictionary.MergedDictionaries> 
     </ResourceDictionary> 
    </Window.Resources> 
    <Grid> 
     <ContentControl Content={StaticResource buttonResource}/> 
    </Grid> 
</Window> 

但是,問題是,這兩個窗口的顯示屏BoundText屬性相同的值,這意味着,無論是WPF Windows系統有從資源按鈕控件的相同情況下,無論在Windows中使用。

我該如何解決這個問題,使得每個窗口從資源獲得一個單獨按鈕控制,仍然從他們自己的視圖模型顯示BoundText性質不同值?

編輯: 對於MSDN下文提到的原因,我不能用x:共享=「false」屬性來解決此問題:

•包含項目的ResourceDictionary中不得在另一個ResourceDictionary中嵌套 。例如,不能使用 x:ResourceDictionary中項目的共享位於 已經是ResourceDictionary項目的樣式中。

回答

8

你嘗試使用x:Shared屬性?

<ResourceDictionary 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> 
    <Button x:Shared="False" x:Key="buttonResource" Content={Binding BoundText}/> 
</ResourceDictionary> 

欲瞭解更多信息,請閱讀here

如果這不起作用,您可以將模板存儲在資源中,而不是按鈕,並使用窗口內的ContentControl來顯示它。

+0

謝謝。但是,我不能將該屬性用作我的**編輯:**部分中提到的原因。 – VS1 2013-02-13 10:06:47

+0

而你使用上面的例子,你會使用下面的標籤。 Loman 2013-07-29 23:24:22

+0

非常好,x:Shared也解決了我的問題,以便在不同視圖中共享一個控件。 – usefulBee 2014-04-22 15:34:56

3

嘗試:

<Style TargetType="Button" x:Key="buttonResource"> 
    <Setter Property="Content" Value="{Binding BoundText}" /> 
</Style>


<Button Style="{StaticResource buttonResource}" /> 
+0

謝謝。我更新了我的問題以包括內容控制的用法,如何根據上述答案將每個WPF窗口(.xaml)中的ContentControl綁定到資源字典中的Button資源? – VS1 2013-02-13 09:21:34

+0

我不明白這會有什麼不同。你可以發佈你的ContentControl的代碼嗎? – KBoek 2013-02-13 09:25:24

+0

我在兩個Window.xaml文件中添加了ContentControl的使用代碼..實際使用不是按鈕,而是一個不同的控件,因爲我們希望在未來的版本中更改資源xaml文件,而無需更改窗口。 xaml文件代碼... – VS1 2013-02-13 09:33:05