Silverlight から WPF にテーマを移植するにはどうすればよいですか?
-
05-07-2019 - |
質問
それは簡単です"!
ちょうど出会ったばかりです Rudi Grobler によるこのブログ投稿 これは、テーマを Silverlight から WPF に移植するのが「簡単」であることを示しています。残念ながら、彼はそれをどうやって行うかについては語っていません。
ダウンロードとインストール
私は両方をインストールしました WPF ツールキット そして Silverlight ツールキット コードプレックスより。
私も行って掘りました 興味のあるテーマのソースコード (BureauBlue) (警告、ロードには少し時間がかかります)、それをテスト プロジェクトの新しいリソース ディクショナリ ファイルに貼り付けました。
ああ、参照が壊れています
青い波線がたくさん入っています。
代替テキスト 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、Version=2.0.5.0、Culture=neutral、PublicKeyToken=7cec85d7bea7798e' への依存関係を解決できません。」ReflectionOnly APIを使用する場合、依存するアセンブリは、ReflectionOnlyAssemblyResolveイベントを介して事前ロードまたはオンデマンドでロードする必要があります。 nmtconcept
それで、私は尋ねます...
WPF で Silverlight テーマを機能させるにはどうすればよいですか?
アップデート!
まあ、分かったと思いました。から始めることにしました DataGrid
. 。Silverlight アセンブリに相当するすべての WPF が何かを理解し、実際にプロジェクトをコンパイルして実行できるようになりました。そしてその結果を見たのですが…
代替テキスト http://img44.imageshack.us/img44/2418/porteddatagrid.jpg
ヘッダーはある程度正しいですが (ソート矢印が欠落していることを除いて)、残りの部分は、黄褐色のレンガに関するある種の恐ろしい事故があったように見えます。
上の例は次のとおりです Silverlight ツールキット Web ページ.
代替テキスト http://img196.imageshack.us/img196/997/silverlightdatagrid.jpg
だから、近寄ることもなかった。
私がしたこと
この混乱に至るまでに私が何をしたか説明させてください。
データグリッド凍結グリッド
まず、掴む必要がありました DataGridFrozenGrid
から この Silverlight ツールキットのソース コード ページ WPF ではそのようなクラスについて聞いたことがないからです。
ビューローブルー
それから私は貼り付けました 鍵の部分 から BureauBlueのソースコード (繰り返しますが、警告:この子は読み込みが遅いです)。
による 鍵の部分, 、 つまり:
- ファイルの先頭にあるすべてのブラシ リソースに加えて、
の
Style
これらの各コントロールについて:- データグリッド列ヘッダー
- データグリッドセル
- データグリッド行ヘッダー
- データグリッド行
奇妙なことに、元のファイルには、 DataGrid
それ自体です (間違っている場合は修正してください。ただし、Find などすべてを使用しました)。
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">
これらの名前を変更するのは非常に悪い考えのように思えましたが、それがすべての問題の原因である可能性があります。しかし、コンパイルするには他に何をすればよいのかわかりませんでした。
私がしなければならなかったもう 1 つの変更は次のとおりです。いくつかの SolidColorBrush
そして LinearGradientBrush
冒頭で使用したアイテム x:Name
の代わりに x:Key
. 。それらをすべて次のように変更しました x:Key
. 。おそらくこれも悪いアイデアだったのでしょうが、やはりコンパイラがそうさせたのです。
これは私を助けるのに役立ちますか?
それでもまだ私と一緒にいるなら、何か提案はありますか?
解決
私は基本的に、四角いペグを丸い穴に差し込もうとしているという結論に達しました(「簡単」だと主張しているにもかかわらず)。シルバーライト DataGrid
WPF ツールキットとはあまりにも違います DataGrid
. 。そこで、今のところ、デフォルトのデータ グリッドを BureauBlue のようにスタイル設定しようとしています。これは非常に骨の折れる作業であり、完璧とは程遠いですが、移植されたスタイルに比べて明らかに改善されています。
代替テキスト http://img26.imageshack.us/img26/7163/styleddatagrid.jpg
他のヒント
未解決の参照は、Silverlight バージョンの System.Windows.dll に対するものだと推測します。WPF バージョンの DLL を指すようにテーマ プロジェクト内の参照を変更する必要があります。
も見ることができます WPF テーマ このプロジェクト (Rudi Grobler がコーディネート) には、すでに BureauBlue が導入されています。