2011-09-22 16 views
6

私はXamlReaderを使用してxamlファイルを読み込んで、FrameworkElementを作成しました。動的にロードされたxamlにバインディングが適用されていません

私はロードのようなそれで表現結合しているんだXAML:私はWPFウィンドウに戻っXamlReader.Load()から取得するFrameworkElement、結合のすべてが正常に動作を配置する場合

<TextBlock Text="{Binding DataContextTextProperty}" /> 

を。

ただし、この場合はLaurent Bugnion's excellent article on creating PNGs from WPF/XAMLを使用しています。 XamlReader.Load()の結果はVisualBrush経由でPNGに直接書き込まれるため、バインディング式を呼び出すために必要なWPFの仕組みはバイパスされているようです。

実際のバインディングは実際にはXamlReader.Load()を呼び出すだけでは実際に呼び出されていないと考えられています。あるいは、私はビジュアルツリーではないことがわからないために動作していません。既存のビジュアルツリーなどにFrameworkElementを追加します。

これらのバインディングが呼び出されるようにするためにできることはありますか?

事前に感謝します。

+0

ビューを画像として書き込むことができるレイアウトとレンダーパスが必要であると思います。これは、ビジュアルツリーにロードする場合にのみ可能です。私が間違っているなら、私を訂正してください。 FlowDocumentとXamlWriterは少し別の話ですが。 –

+0

@AngelWPF私はそれを解決することができ、以下の回答を掲載しました。それは私が望むように行動しているように見えるので、私が作った素朴な間違いがないなら、私はそれに行くつもりです。私はあなたがどれほど安心しているかを伝えることはできません。私はこれを働かせています... –

答えて

4

I FIXED IT !!

エヘン、私が説明することができます...

私は今それを得た方法は考えているが、私はInitialization for Objects Not in an Object Treeに関するMSDNの便利な響きの記事を見つけました。それに

Iは、次のコード例が見つかりました:

:私は上記の質問に記載され、以下のように XamlReaderの使用をカスタマイズすることをローランから(再び、優れた)例を見

Button b = new Button(); 
b.BeginInit(); 
b.Background = Brushes.Blue; 
b.Width = b.Height = 200; 
b.EndInit(); 
b.Measure(paperSize); 
b.Arrange(new Rect(paperSize)); 
b.UpdateLayout(); 

var element = (FrameworkElement)XamlReader.Load(xamlInput); 

element.BeginInit(); 
element.DataContext = dataContext; 

... 

element.Measure(renderingSize); 
element.Arrange(renderingRectangle); 

element.EndInit(); 
element.UpdateLayout(); 

私は(消去法によって、私はUpdateLayout()がキーであると信じていますが)BeginInit()EndInit()UpdateLayout()を追加し、今、私のdynamicallでバインディング式y-loaded xamlが正しく動作しています。ハレイ!

+0

あなたが前にやっていなかったことははっきりしません。キービットとは何ですか? –

+0

ああ私の興奮で私はそれを明確にするのを忘れた。私は今答えを更新しました。 :) –

関連する問題