这很简单”!
我只是碰上了由鲁迪Grobler这个博客帖子 ,说这是“容易”端口从Silverlight来WPF主题。 不幸的是,他并没有说如何做到这一点。
下载并安装
我已经安装了两个WPF工具包和Silverlight工具包从Codeplex上。
我也去了,挖出了对我感兴趣的(BureauBlue)为主题的源代码 (警告,这需要一点时间来加载),并粘贴到这一点在我的测试项目中的新资源字典文件。
UT哦,破引用
很多蓝色波浪线。
替代文字http://img32.imageshack.us/img32/6032/brokenreferences.jpg
这里没有引用
于是,我又添加引用,并发现了......他们都没有上市。
替代文字http://img35.imageshack.us/img35/7466/addreferencedialog.jpg
啊,还有他们是
幸运的是,我能够广泛一些浏览后找到他们。
替代文字http://img269.imageshack.us/img269/3830/addreferencedialogbrows.jpg
所以我加入他们
在发现丢失的引用,我试图将它们添加。 这实际上似乎解决了破碎xmlns
链接(至少蓝色波浪线走了),但是当我建立我的项目,我得到了一个错误:
错误1未知的生成错误,“无法解析依赖于组装‘System.Windows,版本= 2.0.5.0,文化=中性公钥= 7cec85d7bea7798e’,因为它没有被预装。 当使用ReflectionOnly的API,依赖程序集必须是预加载或装载在通过ReflectionOnlyAssemblyResolve事件需求“。 NmtConcept
而且,所以我问...
我如何在WPF Silverlight的主题工作?
更新!
嗯,我想我想通了。 我决定开始与DataGrid
。 我想通了,什么都WPF当量为Silverlight的组件,实际上我得到了我的项目编译和运行。 然后,我看到的结果...
替代文字http://img44.imageshack.us/img44/2418/porteddatagrid.jpg
标题是有些正确的(除了丢失的排序箭头),但它的其余部分看起来像有某种可怕的事故涉及黄褐色的砖块。
下面是对的例子Silverlight工具包的网页 。
替代文字http://img196.imageshack.us/img196/997/silverlightdatagrid.jpg
所以,我甚至没有接近。
我做了什么
请允许我解释什么,我做了在这个烂摊子到达。
DataGrid的冷冻格
首先,我必须抓住DataGridFrozenGrid
从这个Silverlight工具包源代码页 ,因为WPF从来没有听说过这样一类的。
BureauBlue
然后,我将在从关键件 为BureauBlue的源代码 (再次警告:这个孩子是加载缓慢)。
通过关键件 ,我的意思是:
- 在文件开头的所有刷资源加
该
Style
对于每个控件:- DataGridColumnHeader
- DataGridCell
- DataGridRowHeader
- DataGridRow
奇怪的是,原来的文件不包含任何样式的DataGrid
本身(请纠正我,如果我错了,但我用查找和一切)。
Silverlight的- > WPF
接着,我转换xmlns
到WPF当量的引用。 这里是我如何ResourceDictionary
元素横空出世:
<ResourceDictionary
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mwc="clr-namespace:Microsoft.Windows.Controls;assembly=WPFToolkit"
xmlns:mwcp="clr-namespace:Microsoft.Windows.Controls.Primitives;assembly=WPFToolkit"
xmlns:swcp="clr-namespace:System.Windows.Controls.Primitives;assembly=CommonLibraryWpf"
xmlns:sw="clr-namespace:System.Windows;assembly=WPFToolkit">
我当然编辑的命名空间中的标签相匹配。
编辑直到它的工作原理
有一次,我这一切的工作,我仍然有一些小问题。 一些的x:Name
元素在其中有空间。 编译器将不允许这样做,所以我不得不用下划线来代替空格。
以下是相关的片段:
<!-- Important: all underscores used to be spaces -->
<sw:VisualState
x:Name="MouseOver_CurrentRow_Selected">
<sw:VisualState
x:Name="Normal_CurrentRow">
<sw:VisualState
x:Name="Normal_Selected">
<sw:VisualState
x:Name="Normal_EditingRow">
<sw:VisualState
x:Name="Normal_AlternatingRow" />
<sw:VisualState
x:Name="Normal_Selected">
<sw:VisualState
x:Name="MouseOver_Selected">
<sw:VisualState
x:Name="Unfocused_Selected">
改变这些名字似乎是一个非常糟糕的主意 - 而且可能是我所有的问题的原因 - 但我不知道我还能做什么去编译的东西。
其他的变化,我不得不做是:一些的SolidColorBrush
和LinearGradientBrush
在开始项目使用x:Name
,而不是x:Key
。 我改变了所有的人都到x:Key
。 或许,这也是一个不错的主意,但同样,编译器让我。
这是否帮助你帮助我吗?
如果你在我身边毕竟还是认为,有什么建议吗?