WPF X:Shared概述 - CSDN博客

简介: 原文:WPF X:Shared概述 - CSDN博客 一、含义 X:Shared用于指定请求资源时创建实例的两种方式。
原文: WPF X:Shared概述 - CSDN博客

一、含义

X:Shared用于指定请求资源时创建实例的两种方式。

X:Shared = “true”(默认):表示所有请求都是共享同一个实例。一般不显示指定。

X:Shared = “false”:表示每次请求都创建一个新的实例。

二、使用

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

该例子用于展示所有Button的颜色一起变化的情况。

(1) 在新建的Window上拖放三个Button。Button1和Button2是用于展示颜色的变化。如下图所示:

clip_image002

代码如下:

 


 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) 最后界面如下:

点击变色按钮前:

clip_image004

点击变色按钮后:

clip_image006

2、使用x:Shared = “false”

该实例展示只有当前获取到的Background对应的按钮颜色才会改变。

该实例大部分同上例相同,下面只展示其不同部分。

(1) 声明资源,将x:Shared设置为”false”。代码如下:

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

 

注意其中x:Shared=”false”,表示对该资源的每次请求,都将创建一个新的实例与需要的元素相对应。

(2) 界面浏览

点击变色按钮前:

clip_image008

点击变色按钮后:

clip_image010

三、总结

通过以上两个例子,应该对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中。

目录
相关文章
|
C# 前端开发
WPF 用代码调用dynamic resource动态更改背景 - CSDN博客
原文:WPF 用代码调用dynamic resource动态更改背景 - CSDN博客 一般dynamic resoource通常在XAML里调用,如下范例: 如果在ResourceDictionary定义了很...
1814 0
|
1月前
|
C# 开发者 Windows
基于Material Design风格开源、易用、强大的WPF UI控件库
基于Material Design风格开源、易用、强大的WPF UI控件库
|
5月前
|
C#
浅谈WPF之装饰器实现控件锚点
使用过visio的都知道,在绘制流程图时,当选择或鼠标移动到控件时,都会在控件的四周出现锚点,以便于修改大小,移动位置,或连接线等,那此功能是如何实现的呢?在WPF开发中,想要在控件四周实现锚点,可以通过装饰器来实现,今天通过一个简单的小例子,简述如何在WPF开发中,应用装饰器,仅供学习分享使用,如有不足之处,还请指正。
66 1
|
9月前
|
C# Windows
WPF技术之图形系列Polygon控件
WPF Polygon是Windows Presentation Foundation (WPF)框架中的一个标记元素,用于绘制多边形形状。它可以通过设置多个点的坐标来定义多边形的形状,可以绘制任意复杂度的多边形。
476 0
|
9月前
|
C# Windows
WPF技术之RichTextBox控件
WPF RichTextBox是Windows Presentation Foundation (WPF)中提供的一个强大的文本编辑控件,它可以显示富文本格式的文本,支持多种文本处理操作。
354 0
|
5月前
|
前端开发 C# 容器
浅谈WPF之控件拖拽与拖动
使用过office的visio软件画图的小伙伴都知道,画图软件分为两部分,左侧图形库,存放各种图标,右侧是一个画布,将左侧图形库的图标控件拖拽到右侧画布,就会生成一个新的控件,并且可以自由拖动。那如何在WPF程序中,实现类似的功能呢?今天就以一个简单的小例子,简述如何在WPF中实现控件的拖拽和拖动,仅供学习分享使用,如有不足之处,还请指正。
114 2
|
9月前
|
数据挖掘 数据处理 C#
WPF技术之DataGrid控件
WPF DataGrid是一种可以显示和编辑数据的界面控件。它可以作为表格形式展示数据,支持添加、删除、修改、排序和分组操作。
187 0
|
1月前
|
C# 开发者 C++
一套开源、强大且美观的WPF UI控件库
一套开源、强大且美观的WPF UI控件库
142 0
|
6月前
|
算法 C# UED
浅谈WPF之控件模板和数据模板
WPF不仅支持传统的Windows Forms编程的用户界面和用户体验设计,同时还推出了以模板为核心的新一代设计理念。在WPF中,通过引入模板,将数据和算法的“内容”和“形式”进行解耦。模板主要分为两大类:数据模板【Data Template】和控件模板【Control Template】。
103 8
|
9月前
|
定位技术 C# UED
WPF技术之ScrollViewer控件
WPF ScrollViewer是WPF中常用的一个控件,它提供了滚动视图的功能,可用于显示超出容器可视区域的内容。ScrollViewer通常用于容纳大量内容的控件,以在有限的空间内显示这些内容,并允许用户通过滚动来查看隐藏的部分。
771 0