原文:
WPF X:Shared概述 - CSDN部落格一、含義
X:Shared用于指定請求資源時建立執行個體的兩種方式。
X:Shared = “true”(預設):表示所有請求都是共享同一個執行個體。一般不顯示指定。
X:Shared = “false”:表示每次請求都建立一個新的執行個體。
二、使用
1、x:Shared = “true”的情況
該例子用于展示所有Button的顔色一起變化的情況。
(1) 在建立的Window上拖放三個Button。Button1和Button2是用于展示顔色的變化。如下圖所示:
代碼如下:
1
<Window x:Class="XSharedTrue.Window1"
2
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
3
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
4
Title="Window1" Height="334" Width="404">
5
6
<Grid>
7
<Button Height="23" HorizontalAlignment="Left" Margin="69,78,0,0" Name="button1" VerticalAlignment="Top" Width="75">Button1</Button>
8
<Button Height="23" HorizontalAlignment="Right" Margin="0,78,96,0" Name="button2" VerticalAlignment="Top" Width="75">Button2</Button>
9
<Button Height="23" Margin="141,0,166,102" Name="button3" VerticalAlignment="Bottom">變色</Button>
10
</Grid>
11
</Window>
12
(2) 在Window級别建立一個SolidColorBrush資源。代碼如下:
<SolidColorBrush x:Key="redBrush" Color="Red" x:Shared="true"/>
注意其中加了x:Shared = “true”,表示所有對該資源的請求,都使用其建立的唯一執行個體。其實如果是true的話,可以省略。
(3) 在buttonA和buttonB上通過DynamicResource方式引用該資源。如果通過StaticResource方式引用,那麼運作時的更改變不能反映到界面上。
Background="{DynamicResource redBrush}"
(4) 在第三個按鈕上添加事件處理程式,這段程式裡做的是擷取button1按鈕上屬性Background中的資源,并把它改成Green。代碼如下:
1 SolidColorBrush brush = this.button1.Background as SolidColorBrush;
2
3 brush.Color = Colors.Green;
4
(5) 最後界面如下:
點選變色按鈕前:
點選變色按鈕後:
2、使用x:Shared = “false”
該執行個體展示隻有目前擷取到的Background對應的按鈕顔色才會改變。
該執行個體大部分同上例相同,下面隻展示其不同部分。
(1) 聲明資源,将x:Shared設定為”false”。代碼如下:
<SolidColorBrush x:Key="redBrush" Color="Red" x:Shared="false"/>
注意其中x:Shared=”false”,表示對該資源的每次請求,都将建立一個新的執行個體與需要的元素相對應。
(2) 界面浏覽
三、總結
通過以上兩個例子,應該對x:Shared這個屬性有了大緻的了解。
1、 x:Shared = “true”,對每次請求的資源都使用同個執行個體。
2、 x:Shared = “false”,對每次請求的資源都建立一個新的執行個體。按照MSDN說法:使用的其中一種情況為:把繼承自FrameworkElement或FrameworkContentElement的派生類做為資源,這樣就可以達到在一個集合中多次引用同個資源。
四、注意
根據MSDN的文檔描述有下面幾個情況需要注意:
1、 包含使用x:Shared屬性的項的ResourceDictionary必須是已編譯的。這個ResourceDictionary不能放在松散的Xaml中或用于主題中。
2、 包含使用x:Shared屬性的項的ResourceDictionary不能嵌套在另一個ResourceDictionary中。