WPF中,如何将绑定源设置到单件实例

百度网友406027f2289
2013-10-13 · TA获得超过2887个赞
知道小有建树答主
回答量:979
采纳率:60%
帮助的人:879万
展开全部
public class MyButton : Button{private MyButton(){this.Content = "hahhaha, it's me"; } private static MyButton instance = new MyButton(); public static MyButton Instance{get {return instance; } } //public static MyButton GetInstance()//{// return instance; <Label Content="{绑定到MyButton的单件实例上(即Instance)}"/> Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"/> 1,若是使用属性方式提供: 这比较简单,你只需要了解x:Static标记就足够了.它负责对静态数据的引用. 首先,在Xaml代码中加入我们的名字空间: xmlns:local="clr-namespace:WpfApplication3" 然后,这样使用就OK: <TextBox Text="{Binding Source={x:Static local:MyButton.Instance},Path=Content,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"/> 看看效果吧: 改变下面文本框的文本,上面按钮上的文本也会随之改变,都是引用到同一个单例嘛:) 2,若是使用方法方式提供: 即采用下面的方式提供的 public static MyButton GetInstance(){return instance; OK,我们在资源字典中添加一个如下的ObjectDataProvider: <Window.Resources> <ObjectDataProvider x:Key="myButtonKey" ObjectType="{x:Type local:MyButton}" MethodName="GetInstance"/> </Window.Resources> 其将从MyButton类中的GetInstance方法的返回值取得对象,然后我们就可以像使用普通资源一样使用它了: <TextBox Text="{Binding Source={StaticResource myButtonKey},Path=Content,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"/> 效果图就不必看了哈,和上面的图一模一样. 另外:说到x:Static,另起一个问题:操作系统给我们提供很多资源,比如:桌面工作区的大小,系统颜色等,应该如何跟踪这些值呢.以前我的一个同事遇到这样一个问题,其应用程序主窗口铺满整个桌面工作区,但该窗口没有边框,其将窗口大小绑定到SystemParameters.WorkArea.Width和SystemParameters.WorkArea.Height上的,但其发现用户更改了工作区大小(比如将任务栏拖高一些,工作区就变小了)后,窗口却不知道这事而无法及时调整自身大小来适合新的工作区大小.这里需要说明的是,我们对应静态数据的引用常常会写成下面这种方式: {x:Static SystemColors.WindowBrush},这是有效的,但当WindowBrush值发生变化后,你的应用是不会随之改变的正确的方式是:
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式