天天看點

WPF X:Shared概述 - CSDN部落格

原文:

WPF X:Shared概述 - CSDN部落格

一、含義

X:Shared用于指定請求資源時建立執行個體的兩種方式。

X:Shared = “true”(預設):表示所有請求都是共享同一個執行個體。一般不顯示指定。

X:Shared = “false”:表示每次請求都建立一個新的執行個體。

二、使用

1、x:Shared = “true”的情況

該例子用于展示所有Button的顔色一起變化的情況。

(1) 在建立的Window上拖放三個Button。Button1和Button2是用于展示顔色的變化。如下圖所示:

WPF X:Shared概述 - CSDN部落格

代碼如下:

WPF X:Shared概述 - CSDN部落格

 1

WPF X:Shared概述 - CSDN部落格

<Window x:Class="XSharedTrue.Window1"

 2

WPF X:Shared概述 - CSDN部落格

    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

 3

WPF X:Shared概述 - CSDN部落格

    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

 4

WPF X:Shared概述 - CSDN部落格

    Title="Window1" Height="334" Width="404">

 5

WPF X:Shared概述 - CSDN部落格

 6

WPF X:Shared概述 - CSDN部落格

    <Grid>

 7

WPF X:Shared概述 - CSDN部落格

        <Button Height="23" HorizontalAlignment="Left" Margin="69,78,0,0" Name="button1" VerticalAlignment="Top" Width="75">Button1</Button>

 8

WPF X:Shared概述 - CSDN部落格

        <Button Height="23" HorizontalAlignment="Right" Margin="0,78,96,0" Name="button2" VerticalAlignment="Top" Width="75">Button2</Button>

 9

WPF X:Shared概述 - CSDN部落格

        <Button Height="23" Margin="141,0,166,102" Name="button3" VerticalAlignment="Bottom">變色</Button>

10

WPF X:Shared概述 - CSDN部落格

    </Grid>

11

WPF X:Shared概述 - CSDN部落格

</Window>

12

WPF X:Shared概述 - CSDN部落格

(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;

3 brush.Color = Colors.Green;

(5) 最後界面如下:

點選變色按鈕前:

WPF X:Shared概述 - CSDN部落格

點選變色按鈕後:

WPF X:Shared概述 - CSDN部落格

2、使用x:Shared = “false”

該執行個體展示隻有目前擷取到的Background對應的按鈕顔色才會改變。

該執行個體大部分同上例相同,下面隻展示其不同部分。

(1) 聲明資源,将x:Shared設定為”false”。代碼如下:

<SolidColorBrush x:Key="redBrush" Color="Red" x:Shared="false"/>

注意其中x:Shared=”false”,表示對該資源的每次請求,都将建立一個新的執行個體與需要的元素相對應。

(2) 界面浏覽

WPF X:Shared概述 - CSDN部落格
WPF X:Shared概述 - CSDN部落格

三、總結

通過以上兩個例子,應該對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中。