wpf 怎么wpf 动态加载xaml词典资源???

WPF中怎么在xaml文件里使用合并字典资源中的样式?
[问题点数:40分,结帖人lowson0]
WPF中怎么在xaml文件里使用合并字典资源中的样式?
[问题点数:40分,结帖人lowson0]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
相关帖子推荐:
2010年9月 多媒体/设计/Flash/Silverlight 开发大版内专家分月排行榜第二2010年8月 多媒体/设计/Flash/Silverlight 开发大版内专家分月排行榜第二2010年7月 多媒体/设计/Flash/Silverlight 开发大版内专家分月排行榜第二2010年6月 多媒体/设计/Flash/Silverlight 开发大版内专家分月排行榜第二
2010年9月 多媒体/设计/Flash/Silverlight 开发大版内专家分月排行榜第二2010年8月 多媒体/设计/Flash/Silverlight 开发大版内专家分月排行榜第二2010年7月 多媒体/设计/Flash/Silverlight 开发大版内专家分月排行榜第二2010年6月 多媒体/设计/Flash/Silverlight 开发大版内专家分月排行榜第二
2010年9月 多媒体/设计/Flash/Silverlight 开发大版内专家分月排行榜第二2010年8月 多媒体/设计/Flash/Silverlight 开发大版内专家分月排行榜第二2010年7月 多媒体/设计/Flash/Silverlight 开发大版内专家分月排行榜第二2010年6月 多媒体/设计/Flash/Silverlight 开发大版内专家分月排行榜第二
2010年9月 多媒体/设计/Flash/Silverlight 开发大版内专家分月排行榜第二2010年8月 多媒体/设计/Flash/Silverlight 开发大版内专家分月排行榜第二2010年7月 多媒体/设计/Flash/Silverlight 开发大版内专家分月排行榜第二2010年6月 多媒体/设计/Flash/Silverlight 开发大版内专家分月排行榜第二
2010年9月 多媒体/设计/Flash/Silverlight 开发大版内专家分月排行榜第二2010年8月 多媒体/设计/Flash/Silverlight 开发大版内专家分月排行榜第二2010年7月 多媒体/设计/Flash/Silverlight 开发大版内专家分月排行榜第二2010年6月 多媒体/设计/Flash/Silverlight 开发大版内专家分月排行榜第二
本帖子已过去太久远了,不再提供回复功能。WPF Ribbon 前台Resources如何改写到资源字典中?
&&&& 在中我们完成了快捷工具栏的开发,本篇将讲解应用程序菜单开发的相关内容。如下图所示,点击程序窗口左上角的记事本图标(Application Button)会显示出应用程序菜单(Application Menu)列表,列表中的按键即为软件的一些基本功能。
RibbonCommand
以“Open”按键为例,首先仍然需要在&RibbonWindow.Resources&中定义其&RibbonCommand&内容。
&r:RibbonCommand x:Key=&OpenCommand& LabelTitle=&Open&
CanExecute=&OpenCommand_CanExecute&
Executed=&OpenCommand_Executed&
SmallImageSource=&Images/Open.png&
LargeImageSource=&Images/Open.png&
ToolTipTitle=&Open&
ToolTipDescription=&Open document& /&
为&RibbonCommand&添加Command 事件实现打开文档功能:
private void OpenCommand_CanExecute(object sender, CanExecuteRoutedEventArgs e)
e.CanExecute = true;
ApplicationMenu
&&&& &RibbonCommand&完成后继续在&Ribbon&中添加&RibbonApplicationMenu&用于设置菜单列表中的内容。其中&RibbonApplicationMenuItem&即为菜单按键,将相应的&RibbonCommand&添加到Command 属性中。另,按键之间可用&Separator&作为分隔。
&r:Ribbon DockPanel.Dock=&Top& FocusManager.IsFocusScope=&True& Title=&WPF4 Notepad&&
&r:Ribbon.ApplicationMenu&
&r:RibbonApplicationMenu Command=&{StaticResource AppMenuCommand}&&
&r:RibbonApplicationMenuItem Command=&{StaticResource OpenCommand}& /&
&r:RibbonApplicationMenuItem Command=&{StaticResource SaveCommand}& /&
&Separator/&
&r:RibbonApplicationSplitMenuItem Command=&{StaticResource SendAsCommand}&&
&r:RibbonApplicationMenuItem Command=&{StaticResource MailCommand}& /&
&r:RibbonApplicationMenuItem Command=&{StaticResource TwitterCommand}& /&
&/r:RibbonApplicationSplitMenuItem&
&Separator/&
&r:RibbonApplicationMenuItem Command=&{StaticResource CloseCommand}& /&
&/r:RibbonApplicationMenu&
&/r:Ribbon.ApplicationMenu&
&/r:Ribbon&
&&&& 上面代码中对于存在子菜单的按键(例如,SendAs 按键)可用&RibbonApplicationSplitMenuItem&对其进行扩展。子菜单标题内容可通过&RibbonCommand&的LabelDescription 属性进行设置(如下代码)。
&r:RibbonCommand x:Key=&SendAsCommand& LabelTitle=&SendAs&
LabelDescription=&Send this text to the World&
CanExecute=&SendAsCommand_CanExecute&
SmallImageSource=&Images/SendAs.png&
LargeImageSource=&Images/SendAs.png&
ToolTipTitle=&SendAs&
ToolTipDescription=&Send this text to the World& /&
ApplicationButton
&&&& 最后来完成应用程序菜单图标(记事本图标)的开发。当然也需要通过&RibbonCommand&进行设置,与之前不同之处在于不用添加CanExecute 和Executed 内容。
&r:RibbonCommand x:Key=&AppMenuCommand& LabelTitle=&Application Button&
SmallImageSource=&Images/Notepad.png&
LargeImageSource=&Images/Notepad.png&
ToolTipTitle=&WPF4 Notepad&
ToolTipDescription=&Notepad Application with Ribbon Sample& /&
&&&& 将&RibbonCommand&加入&RibbonApplicationMenu& Command 属性后默认情况呈现下图样式,图标的形状并不与Office 2007 一样为圆形。
&&&& 如果想要圆形效果其实也很简单,Ribbon 控件库为我们提供了三种样式模板:Office2007Black、Office2007Blue、Office2007Silver,只需在MainWindow() 中加入一行代码即可实现圆形效果和不同的Ribbon 样式。
&&&& 本篇将开始介绍标签工具栏的开发内容,标签工具栏可以说是Ribbon 的核心部分,应用程序所有的功能特性都会集中在这里,一个强大的Ribbon 工具栏也是一款软件成功的关键。在开始前还是先来看看标签工具栏的结构,从图中可看出Ribbon 工具栏主要分为四部分:Ribbon
&&&& 下面来添加一个Clipboard 菜单组,其中包括三个RibbonButton 控件分别实现“粘贴”、“拷贝”、“剪切”功能。与前两篇文章一样,先为Button 控件编写&RibbonCommand& 和Command 事件内容。
&r:RibbonCommand x:Key=&PasteCommand& LabelTitle=&Paste&
CanExecute=&PasteCommand_CanExecute&
Executed=&PasteCommand_Executed&
SmallImageSource=&Images/Paste.png&
LargeImageSource=&Images/Paste.png&
ToolTipTitle=&Paste&
ToolTipDescription=&Paste contents& /&
&r:RibbonCommand x:Key=&CopyCommand& LabelTitle=&Copy&
CanExecute=&CopyCommand_CanExecute&
Executed=&CopyCommand_Executed&
SmallImageSource=&Images/Copy.png&
LargeImageSource=&Images/Copy.png&
ToolTipTitle=&Copy&
ToolTipDescription=&Copy selected contents& /&
&r:RibbonCommand x:Key=&CutCommand& LabelTitle=&Cut&
CanExecute=&CutCommand_CanExecute&
Executed=&CutCommand_Executed&
SmallImageSource=&Images/Cut.png&
LargeImageSource=&Images/Cut.png&
ToolTipTitle=&Cut&
ToolTipDescription=&Cut selected contents& /&
&&&& 在Command 事件中使用了ApplicationCommands 来完成Paste、Copy、Cut 各项功能。同时使用FocusManger.GetFocusedElement 来锁定ApplicationCommands 的操作对象(TextBox),这也就是为什么在《WPF 4 Ribbon 开发 之 快捷工具栏(Quick Access Toolbar)》一文中提到的将&Ribbon& 的FocusManager.IsFocusScope
属性设为True 的原因。将上面RibbonCommand 设置加入相应&RibbonButton&的Command 属性中。
&r:Ribbon DockPanel.Dock=&Top& FocusManager.IsFocusScope=&True& Title=&WPF4 Notepad&&
&r:Ribbon.QuickAccessToolBar&
&/r:Ribbon.QuickAccessToolBar&
&r:Ribbon.ApplicationMenu&
&/r:Ribbon.ApplicationMenu&
&r:RibbonTab Label=&Home&&
&r:RibbonGroup HasDialogLauncher=&True& Command=&{StaticResource GroupCommand}&&
&r:RibbonGroup.GroupSizeDefinitions&
&r:RibbonGroupSizeDefinitionCollection&
&r:RibbonGroupSizeDefinition&
&r:RibbonControlSizeDefinition ImageSize=&Large& /&
&r:RibbonControlSizeDefinition ImageSize=&Small& /&
&r:RibbonControlSizeDefinition ImageSize=&Small& /&
&/r:RibbonGroupSizeDefinition&
&/r:RibbonGroupSizeDefinitionCollection&
&/r:RibbonGroup.GroupSizeDefinitions&
&r:RibbonButton Command=&{StaticResource PasteCommand}& /&
&r:RibbonButton Command=&{StaticResource CopyCommand}& /&
&r:RibbonButton Command=&{StaticResource CutCommand}& /&
&/r:RibbonGroup&
&/r:RibbonTab&
&r:RibbonTab Label=&View& /&
&r:RibbonTab Label=&Help& /&
&/r:Ribbon&
&&&& 上面程序中通过RibbonControlSizeDefinition 来定义RibbonButton 控件在Group 中的图标显示方式(分别为大、小两种),在本例中我们将Paste 设为大图标,另外Copy、Cut 两个设为小图标。HasDialogLauncher 属性用于设定是否显示Dialog Box Launcher 按键(如下图),如果有需要也可以为Dialog
Launcher 添加工具栏。
&&&& 这样一个RibbonGroup 就完成了。有了上面的基础对于Font 组的开发就轻而易举了,在该组中使用了两个&RibbonControlGroup&控件组分别用于字体颜色和尺寸大小的设置,大家可以参考下面代码进一步了解。
&r:RibbonGroup&
&r:RibbonCommand LabelTitle=&Font& /&
&r:RibbonControlGroup&
&r:RibbonLabel ToolTip=&Font Color&&
&r:RibbonLabel.Content&
&Image Source=&Images/Paint.png& Width=&16& Height=&16& /&
&/r:RibbonLabel.Content&
&/r:RibbonLabel&
&r:RibbonButton ToolTip=&Black& Background=&Black&
CommandParameter=&Black&&
&r:RibbonCommand Executed=&FontColorCommand_Executed& /&
&/r:RibbonButton&
&r:RibbonButton ToolTip=&Red& Background=&Red&
CommandParameter=&Red&&
&r:RibbonCommand Executed=&FontColorCommand_Executed& /&
&/r:RibbonButton&
&r:RibbonButton ToolTip=&Blue& Background=&Blue&
CommandParameter=&Blue&&
&r:RibbonCommand Executed=&FontColorCommand_Executed& /&
&/r:RibbonButton&
&r:RibbonButton ToolTip=&Green& Background=&Green&
CommandParameter=&Green&&
&r:RibbonCommand Executed=&FontColorCommand_Executed& /&
&/r:RibbonButton&
&/r:RibbonControlGroup&
&r:RibbonControlGroup&
&r:RibbonLabel ToolTip=&Font Size&&
&r:RibbonLabel.Content&
&Image Source=&Images/Font.png& Width=&16& Height=&16& /&
&/r:RibbonLabel.Content&
&/r:RibbonLabel&
&r:RibbonComboBox x:Name=&fontComboBox& Width=&80&
SelectionChanged=&fontComboBox_SelectionChanged&&
&r:RibbonComboBoxItem Content=&10&/&
&r:RibbonComboBoxItem Content=&20&/&
&r:RibbonComboBoxItem Content=&30&/&
&/r:RibbonComboBox&
&/r:RibbonControlGroup&
&/r:RibbonGroup&
修改字体大小和颜色后的效果图:
&&&& 至此,Ribbon 工具栏相关内容的介绍已全部完成,希望该系列对大家有所帮助。当然Ribbon 控件库中的控件还不止这些,有很多其他控件供开发者使用,有兴趣的朋友可以按需要进行选择,并完善软件的Ribbon 工具栏功能。
注:1.为什么在同一个XAML中不能同时引用两个资源字典文件,请高手指教;
2.程序命令绑定及资源引用都写在前台XAML文件中,我想把命令绑定及资源引用写到独立的资源字典XAML,上面的RibbonCommand
应如何改写,请高手指教;
可以引用多个资源字典的。使用ResourceDictionary. MergedDictionaries 语法如下:
&object.MergedDictionaries&
oneOrMoreResourceDictionaries
&/object.MergedDictionaries&
我看到你的command挂接了事件。 所以是不宜单独放置到资源字典中的。&
可以考虑binding command 的方式。
已标记为答案
Microsoft 正在进行一项网上调查,以了解您对 Msdn 网站的意见。如果您选择参加,我们将会在您离开 Msdn 网站时向您显示该网上调查。是否要参加?
<input type="hidden" id="hdnTrackerText" value="请不要关闭此窗口。谢谢!完成访问时,调查将显示在此处,所以请不要关闭此窗口。" />WPF资源字典中的控件事件触发 - 下载频道 - CSDN.NET
&&&&WPF资源字典中的控件事件触发
&WPF资源字典中的控件事件触发
有许多同学在写WPF程序时在资源字典里加入了其它控件,但又想写事件来控制这个控件 怎么办呢?
若举报审核通过,可奖励20下载分
被举报人:
loryrichie
举报的资源分:
请选择类型
资源无法下载
资源无法使用
标题与实际内容不符
含有危害国家安全内容
含有反动色情等内容
含广告内容
版权问题,侵犯个人或公司的版权
*详细原因:
您可能还需要
Q.为什么我点的下载下不了,但积分却被扣了
A. 由于下载人数众多,下载服务器做了并发的限制。若发现下载不了,请稍后再试,多次下载是不会重复扣分的。
Q.我的积分不多了,如何获取积分?
A. 传优质资源可以获取积分,详细见。选择完成有奖的任务,可以获取积分。选择购买VIP会员服务,无需积分下载资源。评价资源返积分:第一次绑定手机,将获50下载积分及100论坛可用分。论坛可用分兑换下载积分。
下载资源意味着您已经同意遵守以下协议
资源的所有权益归上传用户所有
未经权益所有人同意,不得将资源中的内容挪作商业或盈利用途
CSDN下载频道仅提供交流平台,并不能对任何下载资源负责
下载资源中如有侵权或不适当内容,
本站不保证本站提供的资源的准确性,安全性和完整性,同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
开发技术下载排行
你下载资源过于频繁,请输入验证码
如何快速获得积分?
你已经下载过该资源,再次下载不需要扣除积分
WPF资源字典中的控件事件触发
所需积分:1
剩余积分:
VIP会员,免积分下载
会员到期时间:日
剩余下载次数:1000您现在的位置:
& &&WPF中创建可换肤用户界面
在 WPF 中创建可换肤的用户界面博客园 14:08
  这篇文章讨论的是在中如何创建可以在运行时换肤的用户界面的一些基础知识,我们将验证WPF对用户界面皮肤的支持,并通过一个简单的示例程序来展示如何使用这些特性。
  当皮肤这个术语被到用户界面中来时,就是指被运用于用户界面上的所有界面元素的可视化样式.一个可换肤的用户界面既可以是在编译时也可以是在运行时被定制(制定皮肤).WPF为用户界面的"换肤"提供了强大的支持.
  对于一个软件来说在很多情形下"换肤"也许将变得非常重要.它可以被用来允许最终用户根据个人审美观念来定制自己的软件界面.还有一种情形也许会用到"换肤",就是当一个公司开发的应用程序被分发成多种客户端,也许每个客户端得拥有它自己的Logo,颜色,字体等等,如果这些程序被有意地设计成可换肤的话,那么只需要付出一点点的努力就可以很轻松的完成这项任务了.
  三大基础
  解决这一难题需要三大基础,在该部分我们只对它们做一个简要的介绍,可以参考本文的结尾处的"外部链接"部分以获得更多相关信息.如果你对"层次型资源","合并的资源字典"以及"动态资源"比较熟悉的话,你可以跳过该部分.
  层次型资源
  为了实现软件"换肤",你必须明白WPF的资源系统是如何运作的.在WPF中有很多类型都拥有一个ResourceDictionary类型的公开属性Resources,该字典包含了一个"键-值"对列表,其中"键"可以是任意类型的对象,其"值"就是一个资源(“值"也可以是任意类型的对象).大多数时候我们放入资源字典中的"键"都是string类型的对象,而有时也可能是其他类型.所有的资源都被存放到这样的资源字典中,而资源查找程序正是使用它们来查找所需的资源.
  在应用程序中,资源是按照一种层次关系被组织在一起的.当定位资源(比如画刷,样式,数据模板或气体任意类型的对象)时,软件就会执行一个导航于这个层次组织间的查找程序来查找与指定"键"相对应的资源.
  它(资源查找程序)会首先检查需求该资源的元素自己所拥有的那些资源,如果没有找到,则它会检查该元素的"父元素",看该"父元素"是否拥有所需的资源.如果"父元素"也没有所需的资源,则它会继续沿着"元素树"向上检查该元素的每一个"祖先".如果仍然没有找到,则它最终会向Application对象询问该资源,在本文中我们可以忽略在那之后还会发生什么.
  合并的资源字典
  ResourceDictionary类中有一个属性允许你从其它的ResourceDictionary实例来合并资源字典,这就像集合的"并集".这个属性名叫MergedDictionaries,其类型为Collection.下面这段话是SDK文档中用于解释资源合并时的域规则:
  在合并字典中的资源仅仅当它们被合并到主资源字典域中之后才在资源查找域中占有一个位置.尽管在独立的字典中其资源"键"必须是互不相同的,但在合并字典中一个"键"却可能出现多次.因此,被返回的资源就来自于被合并的资源字典集合中的最后一个字典.如果这些被合并的资源字典是用XAML定义的话,那么它们在合并字典中的顺序就于它们在XAML语言中被标记的顺序一致.如果一个"键"既包含于主字典又包含于其它被合并的字典,那么在主字典中的资源将被返回.这些规则既适合动态资源引用也适合于静态资源引用.
  转到本文末尾处的"外部链接"部分你可以找到关于资源合并的帮助页链接.
  动态资源引用
  解决这一难题(软件换肤)的最后一个基础点是通过元素的属性动态地访问可视化资源的这一机制,这也就是扩展标记DynamicResource所做的事情.动态资源引用就向数据绑定一样,当资源在运行时被替换后那些使用该资源的属性将被赋予新的资源.
  比如说我们有一个TextBlock对象,它的属性必须被设定为有当前皮肤决定的任意的Brush,我们可以为该TextBlock对象的Background属性建立一个动态资源引用,当在运行是软件的皮肤被更换后,与之相应的画刷就将被应用于该TextBlock.动态资源引用将会自动地用新画刷来更新TextBlock对象的Background属性.
  正如下面的XAML所描述的一样:
以下是引用片段:&TextBlock&Background="{DynamicResource&myBrush}"&Text="Whatever..."&/&
  转到本文末尾处的"外部链接"部分参考在代码中是如何做到的.
  应用三大基础
  每个皮肤的资源都被放到独立的ResourceDictionary中,它们都属于自己的XAML文件.在运行时我们可以加载一个包含的所有皮肤所需资源的ResourceDictionary(此后我们称之为"皮肤字典"),并将它插入到MergedDictionaries 中(其为Application对象的ResourceDictionary),通过将皮肤字典插入到应用程序资源中,应用程序的所有的元素都可以使用该皮肤字典中所包含的资源了.
  界面上所有支持换肤的元素都应该通过动态资源引用来引用皮肤资源,这就使得我们可以在运行时进行换肤以及让这些元素拥有新的皮肤资源.
  最简单的完成这项任务的方式是让元素的Style属性被指定为动态资源引用.通过使用元素的Style属性,我们可以让皮肤字典包含那些可以设置任意个属性的Style,这就比从皮肤字典中为每一个单独的属性设置动态资源引用更容易编写和维护代码.
  示例程序是什么样子的
  我们可以在本文的顶部位置下载到这个示例程序,其包含了一个可以设置三种皮肤的简单窗体.当你使用默认皮肤启动程序时,其如图所示:
  当你右击窗体的任意位置时,会弹出一个上下文菜单允许你更换皮肤,如下图所示:
(作者:周银辉责任编辑:幽灵)
欢迎在新浪微博上关注我们
办公软件IT新闻整机

我要回帖

更多关于 wpf 动态加载xaml 的文章

 

随机推荐