問題タブ [elementhost]

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.

0 投票する
3 に答える
27860 参照

wpf - WPF ListView のパフォーマンスが非常に遅い - なぜですか? (ElementHost、またはその他の理由?)

私は、WPF UserControl を含む単一の ElementHost を持つ Windows フォーム アプリを持っています... 私の WPF には、非常に単純な ListView があります。

ソースに 10 個のアイテムがある場合、フォームは 1 秒未満で読み込まれます。ソースに 1000 個のアイテムがある場合、7 秒かかります!!! 私のタイマーは読み込みのみを考慮しています (アイテムを取得するのにかかる時間ではありません)。

だから私の質問は:

ElementHost の使用はパフォーマンスの悪夢ですか?

WPF DataBinding はパフォーマンスの悪夢ですか?

ListView はがらくたですか? (ところで、WPFToolkit の DataGrid と同じ結果)?

0 投票する
3 に答える
7896 参照

wpf - WinForms でホストされた WPF コントロールからのリソース ディクショナリのロード/使用

実行時に WPF コントロールをホストする必要がある Windows フォーム アプリケーションがあります。(ElementHost コントロールを使用して) 基本的なホスティングと対話が完了し、WPF コントロールで定義済みのカスタム リソース ディクショナリを使用する必要があることを実行しようとするまで、すべて正常に動作します。(WPF コントロールとそのすべてのリソース ディクショナリは、すべて同じ WPF コントロール ライブラリ DLL で定義されています。)

それが起こるとすぐに、次のようなエラーがたくさん表示されます。

参考文献を 1 つ見つけました(アーカイブのためリンクが切れているようです。これ は最初に参照された記事と同じかもしれません)。これについては話していますが、この記事は WPF 側からアプローチしているように見えますが、すべてがスタンドアロンの WPF アプリケーションで機能するため、WPF コントロールを変更する必要はありません。

これを達成する唯一の方法が WPF 側で変更することである場合は、それらの変更を行うことができます (私は WPF コントロール ライブラリの責任者ではありませんが、同じ会社で働いている人なので問題ありません)変更を加える時間を得るよりも.) しかし、これを機能させるために WinForms 側で何かできることを望んでいます。

WPF コントロール ライブラリには、次のプロパティを持つプロジェクトで定義された "Default.xaml" という名前のリソース ディクショナリ ファイルがあります。

ビルド アクション: ページを出力ディレクトリにコピー: コピーしない カスタム ツール: MSBuild:Compile

スタンドアロン WPF アプリケーションの App.xaml ファイルには、次のエントリがあります。

コントロール ライブラリは、そのリソースを取得する方法を既に知っているはずです。Resources.MergedDictionaries.Add() を使用するとうまくいくように見えますが、既存の辞書のインスタンスはどこで取得できますか?

0 投票する
3 に答える
2238 参照

wpf - ElementHost でホストされている場合、アプリケーションレベルのリソースは動的ではありません

WinForms コンテナーで WPF UserControl をホストしています。ここで、UserControl のテーマ/スキンを設定できるようにしたいと考えています。これを行うために、「スキン」を定義するリソース ディクショナリをいくつか用意しました。アプリが起動したら、「新しい System.Windows.Application()」を作成して、Application.Current が存在するようにします。テーマを変更するには、実行時に古いスキンを削除し、新しいスキンをアプリケーション レベルのリソース ディクショナリにマージします。ただし、これにより、UserControl で動的に参照されるリソースは変更されません。これをストレートな WPF アプリケーションで試してみたところ、問題なく動作しました。私は何かを見逃していますか、それともこれを行うことはまったく不可能ですか? ちなみに、UserControl を初期化する前にアプリケーション リソースにスキンを追加すると機能しますが、その後スキンを変更することはできません。

これを最も基本的な方法でレポするには:

新しい WinForms アプリケーションを作成します。アプリに WPF UserControl を追加します。これはとても簡単です:

それぞれの色のキー ButtonBG を持つ SolidColorBrush を持つ 2 つの ResourceDictionaries、White.xaml と Black.xaml (または何でも) を作成します。Form1.cs で、2 つのボタンと ElementHost を追加します。ElementHost の子を、作成したばかりの UserControl のインスタンスに設定します。スキンを交換するイベントにボタンを接続します。

Program.cs で、Application.Current が存在することを確認し、初期スキンを設定します。

ここで、白のボタンをクリックすると、UserControl のボタンが白に変わり、黒のボタンをクリックするとボタンが黒に変わることが期待されます。ただし、これは起こりません。

誰かが理由を知っていますか?解決策はありますか?

編集:アイデア: おそらく、テーマが変更されたときに DynamicResources の再評価を強制する方法があれば、それはうまくいくでしょう。

ありがとう、ダスティ

0 投票する
4 に答える
11619 参照

wpf - WindowsフォームのElementHostにあるときにWPF TextBoxが入力を受け入れない

既存の Windows フォーム/MFC アプリケーション エンジン (Rhino 3D) 内で使用される WPF の UI コントロールを開発しています。

アプリケーション エンジンは、基本的にエンジン インターフェイスにドッキングできる子ウィンドウ内に Windows フォーム コントロールを配置できる「ドックバー」を作成する機能を公開します。

Dockbar に追加された ElementHost コントロール内に単純な WPF TextBox を配置しようとしています。これは一見すると正常に動作するように見えます。しかし、TextBox に入力しようとした後、特定のシーケンスのみが実際に TextBox に表示されます。DELETEBACKSPACECOPYPASTE、およびSELECTING TEXTが機能します。A ~ Z、1 ~ 9 などを入力すると、これらのキーは表示されません。

私はネットを調べて聞いたことがありますElementHost.EnableModelessKeyboardInterop()が、これはフォームから作成されている WPF Windows にのみ適用されます。私は WPF UserControls を作成し、ElementHost コントロールでそれらをホストしているだけです。

Dispatcher.Run() について話している投稿を見ましたが、ある程度は機能しますが、フォームの残りの部分が壊れています。

PreviewKeyUp 、PreviewKeyDownKeyUp、およびKeyDownイベントはすべて TextBox で発生しますが、残念ながら TextBox にテキストは表示されません。

Windows メッセージについてはよくわかりませんが、WinSpector を使用して、TextBox から WM_GETTEXT メッセージが来ていないことに気付きました (そうであるべきかどうかはわかりません)。

また、新しい Windows フォーム プロジェクトを作成し、そこで同じことを行ったところ正常に動作したため、Rhino 3D エンジン内でウィンドウを作成してドッキングする方法に問題があるはずです。

動作しないサンプルコードは次のとおりです。

0 投票する
1 に答える
3504 参照

wpf - ElementHost とのドッキング

WPF ユーザーコントロールを既存の WinForms プロジェクトに追加し、WPF ユーザーコントロールをドッキングしてスペース全体を埋めようとしています。

ボタンのクリックに応答して、WinForms UserControls を親フォーム (パネル) にロードする現在のフレームワークがあります。これは私がフックしようとしている場所です - 現在ロードされている WinForms UserControl には ElementHost があります。

階層:

  • Form1.cs - WinForms UserControls を動的にロードするパネルが含まれています
    • WinForms UserControl - ElementHost を含む
      • WPF ユーザー コントロール

ElementHost には、Dock が Fill に設定され、その Child プロパティが ucReport に設定されています。これは WPF UserControl であり、次のマークアップがあります (最上位のデザインのみが含まれています)。

フォームのサイズを変更すると、UserControl のコンテンツは垂直方向に拡張されますが、水平方向には、コンテンツを収容するのに十分な大きさしか拡張されません。

デザイナーで WinForms UserControl (ElementHost を持つもの) を表示すると、問題が明らかになります。指定された WPF コンテンツがレンダリングされ、上から下に塗りつぶされますが、左から右には塗りつぶされません。

ElementHostである親コンテナを満たすためにそれを取得するために(おそらくUserControl宣言で)設定する必要があるのはXAMLの何かだと思います-私はプロパティを見つけることができません。

誰かが私を啓発してくれますか?

0 投票する
2 に答える
1403 参照

wpf - ElementHost コントロールでの WPF 検証

ElementHost コントロール (WPF UserControl を含む) と [保存] ボタンを含む WinForms フォームがあります。

WPF UserControl には、いくつかの検証が行われたテキスト ボックスがあります。このようなもの...

これはすべてうまくいきます。ただし、フォームが無効な状態にある間は [保存] ボタンを無効にします。

どんな助けでも大歓迎です。

0 投票する
3 に答える
4179 参照

wpf - WPF ShowDialog と ElementHost

ElementHost の子である WPF ユーザー コントロールからモーダル ウィンドウを表示し、モーダル ウィンドウの所有者/親を含むフォーム コントロールに設定することは可能ですか?

Owner プロパティは Window のインスタンスを取得するため、古い Windows フォーム フォーム コントロールである Element Host コントロールの親に設定する必要があるため、これを行うことはできないと思います。回避策または代替アプローチがあるかどうか疑問に思っています。

問題は、モーダル ウィンドウが表示されているときにユーザーが別のアプリケーションに切り替えた後、再び戻ると、モーダル ウィンドウが非表示になり、ユーザーがメイン ウィンドウを操作できないことです。これは、所有者/親の関係が設定されていないため、ウィンドウが表示されていない場合でも、モーダル ウィンドウがまだ表示されていると Windows が認識しているためです。

乾杯、ジェームズ。

0 投票する
2 に答える
1774 参照

wpf - WinForm ElementHost でホストされる Prism の問題

ElementHost コントロールで WPF プリズム アプリをホストする際に問題があり、助けを求めています。

PRISM アプリは、Silverlight およびスタンドアロン WPF で正常に動作します。

メイン シェルは WinForm の elementHost で正常にセットアップされているようですが、他のビューは「RegisterViewWithRegion」でのみロードされ、「Add,Activate」プロシージャではロードされません。スコーピングには「Add,Activate」が必要です。ただし、シェルを 2 回ロードしていることが問題だと思いますが、意図的ではありません。「Resolve」を 2 回呼び出さずに、ブートラッパーを呼び出して elementHot を設定する方法が見つかりません。

これが私の WinForm と私のブートストラッパーのコードです。ここでも、「RegisterViewWithRegion」を使用するとすべてが機能します。

Winform コンストラクターは次のとおりです。

ブートストラップは次のとおりです。

0 投票する
1 に答える
2155 参照

c# - WPF-C#:この要素は現在どのコンテキストにも関連付けられていません

ElementHostControl内のWinFormsコントロールで使用するWPFUserControlがあります。次に、Windowsフォームが開いたままの状態でWPFウィンドウを起動します。次に、WPFウィンドウを閉じて、子要素をWPF UserControlに追加しようとすると、次の例外を除いて、(子要素の) "InitializeComponent()"でクラッシュします。

「System.Configuration.dllでタイプ'System.Configuration.ConfigurationErrorsException'の最初のチャンスの例外が発生しました。追加情報:この要素は現在、どのコンテキストにも関連付けられていません。」

なぜそれが起こるのかはわかりましたが、問題を解決する方法がわかりません。このコードを省略した場合:

その後、すべてが大丈夫です。ただし、ResourceDictionary(および定義されたスタイルとテンプレート)がWPFウィンドウとコントロール全体で使用できないため、これが必要です。これは私がここで見つけた

両方の長所を組み合わせる方法はありますか?アプリケーションがクラッシュするのを防ぎながら、ResourceDictionaryを保持しますか?

0 投票する
3 に答える
4854 参照

winforms - ElementHost の使用時に wpf コントロールをロードする前の黒い背景

ElementHostを使用してWinFormsでWPFを使用しています。フォームがロードされると、ElementHost がロードされようとしているところに黒い背景が点滅します。これはちょっと悪いように見えます。これを取り除く方法について何か提案はありますか?