XamlWriter/Reader->複数のコンストラクター呼び出しで、要素が重複しています
-
02-10-2019 - |
質問
私はここでちょっと立ち往生しています。 xamlwriter.save()を介してドラッグされたuielmentsをシリアル化するDragnDrop-libraryを使用しています。
今、私はグリッドを拡張するクラスのいくつかのインスタンスをドラッグしようとしています。コンストラクターでは、いくつかの要素を視覚ツリーに押し込みます。コンストラクターは、オブジェクトが降下され、要素が何度も追加されたときに呼び出されます(ドロップの頻度に応じて何度も何度も)。悲しいことに、Children.Countは、コンストラクター内から値を取得した場合、子供の要素がないと言っています。外部から(mygrid.children.countによって)それを取得すると、より高い(不要な)量が得られます。
ビジュアルを初期化するために使用する必要がある他の機能はありますか?またはそれらの重複を防ぐ他の方法はありますか?
ありがとうと乾杯
正しい解決策はありません
他のヒント
しばらく時間がかかりましたが、解決策を見つけたようです。
これで、すべてのサブクラスが必要とする視覚要素を既に含むベースクラスを作成できます。そして、それらは複製せずにXamlWriter/Readerを介して解析可能です。える。
1)usercontrolを拡張します(add-> usercontrolは> usercontrol-> classと手動で継承する)拡張)
2)標準のinitializecontrol()を入れます。コンストラクターに
3)initializecontrol()を実装し、レイアウト、子供の追加などを置きます
4)xamlwrite/xamlread/resenit like crazy
それが誰かに役立つこと、そして私が予期せぬことを監督していないことを願っています。
- 編集:もちろん。複製がありますが、それらを見ることができません。 XamlReaderの後に、私のinitializeComponent()によって作成されたuiLementsがあり、その後xaml-parsedが作成されます。コード内の参照は、表示されないコード作成コントロールを考慮してください:/
はぁ。
これの周りの完璧な方法とはほど遠い1つは、スイッチを初期化されたイベントハンドラーに入れることです。if(HasContent)
Initialize();
else
Reinitialize();
Multiinitialize();
initialize()がビジュアルツリーにuieLementsを追加する場合、Reinitialize()は正しい参照を見つけるだけです( control = FindName("controlName")
)そして、Multiinitialze()は、イベントハンドラーと、Xamlreaderを通じて途中で他に失われるものを再現します。
さて、XAMLでカスタム継承されたUserControlをインスタンス化することができますが、属性を設定する簡単な方法はありません。これは、属性の設定が初期イベントの前に発生し、nullpointerexceptionsが待っているためです。あなたは私が推測するバインディングでそれを回避することができます。
しかし、より簡単な方法が必要です。私にお知らせください!