問題タブ [visual-tree]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - WPF UIElement をビジュアル ツリーから FixedPage に移動するには?
私の MVVM アプリケーションは、画面上のビジュアル オブジェクトを使用して、画面のコンテンツを印刷されたドキュメントにレンダリングしています。私のビューには、リソースをContentControl
使用しDataTemplate
て何を表示するかを決定する がありますが、そのコンテンツをFixedPage
オブジェクトに追加しようとするArgumentException
と、次のメッセージが表示されます。
指定された Visual は、既に別の Visual の子であるか、CompositionTarget のルートです。
印刷を処理するビューの (簡略化された) XAML コードは次のようになります。
...そして、問題のある印刷ボタンクリックハンドラーのコードビハインドは次のようになります:
問題を解決するために次のことを試しましたが、すべて成功しませんでした。
Content
のメンバーContentControl
を nullに設定します (上記のコードのように)。- 設定
this.Content=null
。画面が空白になりますが、それでも例外が発生します。 RemoveLogicalChild()
さまざまなコントロールでの使用。どれもうまくいきませんでした。- とオブジェクトで使用
RemoveVisualChild()
します。どちらも現在のオブジェクトの子ではありませんでした。printContentControl
content
- またはが`{x:Null}' の
DataTrigger
場合、XAML で s を使用してテンプレートを置き換えます。無効。Content
DataContext
ContentControl
印刷コマンドを実行すると がViewModel
変わるので、画面の外観が乱れても問題ありません。View
printContentControl
のビジュアル コンテンツ (またはコントロール全体) をView
のビジュアル ツリーからViewModel
のFixedPage
オブジェクトに移動するにはどうすればよいですか?
汚い回避策
印刷するコンテンツのラッパー クラスを作成することで、機能を動作させることができますが、元の質問には答えません。
ラッパークラス
ラッパーを使用して印刷可能なコンテンツを保持する XAML を更新しました。
ラッパーから印刷可能なコンテンツを取得するためにコードビハインドを更新
c# - 外部アプリの RootVisual を取得できないのはなぜですか?
私は WPF で自動テスト フレームワークに取り組んでいます。基本的な WPF 自動化フレームワークを使用してほとんどのことを自動化することは可能ですが、UI レベルで何が起こっているかを詳細に把握することは非常に困難です。DataContext のプロパティやコントロールのプロパティなどを確認できる必要があります。スヌープができるから、これが可能であることを私は知っています。Snoop を使用すると、任意の WPF アプリのビジュアル ツリー全体をトラバースできます。この機能が必要です。だから、私はこのコードを書きました:
コードは最後の 2 行目まで機能します。最後から 2 番目の行は null を返しますが、その理由がわかりません。windowHandle は返されますが、HwndSource は返されません。ここで何がうまくいかないのですか?