問題タブ [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 投票する
1 に答える
143 参照

wpf - Winforms - 最小化するとアプリケーションが動かなくなる

つい最近、elementhost を使用して Winforms で WPF Textbox を使用していました。少なくとも 100,000 文字以上、2,000 行を超える大きなテキスト ファイルをロードしました。ファイルを開き、テキストをwpfテキストボックスに通常どおり追加し、テキストボックスを簡単にスクロールできます。このドキュメントを読み込んでいるときにプログラムを最小化すると、プログラムが動かなくなり、最大化するのに少なくとも 1 分以上かかることがあります。ドキュメントやプログラムがドキュメントを開く方法に問題はありません。何が問題なのかわかりません。もしそうなら、何が問題になる可能性がありますか、誰でもこれを解決できますか。

プログラムをデバッグしましたが、パフォーマンスだけでデバッグエラーはありませんが、最小化すると正常にロードされて開きます。

ファイルを開くコード:

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

c# - ここで「'Map' の定義が含まれていません」と表示されるのはなぜですか?

次のように、次の方向を使用して、Bing Map WPF コントロールを Winforms アプリに追加しようとしています

(私のユーザー コントロールは BingMapHostUserControl という名前です)。これで、「「DataMapper.BingMapHostUserControl」には「Map」の定義が含まれていません

そこで、elementHost を参照して、コードを次のように変更しました。

...しかし、それで同様のエラーメッセージが表示されます

私は何を間違っていますか?

アップデート

ユーザー コントロールの XAML は次のとおりです。

そして、メイン フォームの Designer.cs ファイルから:

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

wpf - WPF アプリケーション内の埋め込みコントロールを見つける

WPF と Windows フォームが混在するレガシー アプリケーションがあります。基本的に、Windows フォームに ElementHost を追加することにより、WPF アプリは Windows フォーム アプリケーションに読み込まれます。この WPF アプリケーションは、次に WPF ユーザー コントロールをロードします。この WPF ユーザー コントロールに埋め込まれているのは、最終的に System.Windows.Forms から派生する従来の Windows コントロール (カスタム ブラウザー コントロール) です。

このコントロールへのハンドルをコードから動的に取得する方法はありますか? レンダリング時にコントロールに付けられる名前はわかりません。私たちが知っているのは、前述のように System.WINdows.Forms から派生したコントロールのベースタイプだけです。

これまで見てきたすべての例では、最終的に DependencyObject になる子を動的に検出する方法について説明しています。古い学校の Windows フォーム コントロールを WPF アプリ内でプログラムによって検出する方法を説明する例をまだ見つけていません。

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

wpf - ホストされた Winform コントロールが WPF からのイベントに応答しない

これは、StackOverflow での最初の質問です。評判が悪いため、リンクや画像を投稿できませんでした。私は次の問題に 2 日以上取り組んできました。どんな助けでも大歓迎です。

質問に入る前に、私が持っているものと期待しているものは次のとおりです。

  • ElementHostコントロール でWPFをホストするWindows フォームがあります。
  • そして、DateTimePicker に似たWinforms UserControlがあります。これは、 WindowsFormsHostコントロール
    内でホストされます。

上記のシナリオは、次の理由により避けられません。

  • すべてのアプリケーションへの認証ダイアログは Winforms で開発されており、Winforms インスタンスをパラメーターとして取ります。WPF のバージョンはまだ導入されていません。したがって、ElementHost を使用して Windows フォーム内でビューをホストする必要がありました。
  • 私の WPF 内でホストされている Winforms コントロールも避けられません。DateTimePicker Winforms コントロールと同様に動作する独自の DateTime Winforms UserControl がありますが、より複雑な操作が必要です。したがって、このコントロールを WPF バージョンに置き換えることは論外です。

期待される機能
:

  • WPF コントロール (たとえば、テキスト ボックス)

  • 上で言及した DateTime Winforms UserControl。

  • そして基本的に上記のコントロールをリセットするキャンセルボタン。

[キャンセル] ボタンをクリックするとViewModel、たとえばRunViewModelからWPF UserControlコード ビハインド ファイル (たとえばRunView.xaml.cs) にイベントが発行されます。

コード ビハインド ファイルでは、次のようにイベントをサブスクライブしました。

WPFコントロールはデフォルト値にリセットされますが、DateTime UserControlはリセットされ ません。

したがって、テスト目的で、ElementHost コントロールを削除し、WPF ビューに、DateTime Winforms UserControl をホストする WindowsFormsHost コントロールと、WPF の [キャンセル] ボタンを追加しました。

ボタンをクリックすると、DateTime コントロールの値がデフォルト値にリセットされます。

次に、これは私の DateTime Winforms UserControl の問題であると考えました。そこで、実際のアプリケーションでDateTime Winforms UserControl をWinforms Textboxコントロールに置き換えました。したがって、ネストは次のようになります。

WinForms-ElementHost-WPF-WindowsFormsHost-Winforms テキストボックス

これがxamlコードです。

初期ロードでは、テキストをロードTextboxしていますInitial Load Text

上で述べたように、[キャンセル] ボタンを押すと、次のようになります。

  • ViewModel からイベントを発行する

    eventAggregator.GetEvent().Publish(true);

  • コード ビハインド ファイル (xaml.cs) でイベントをサブスクライブします。

    eventAggregator.GetEvent().Subscribe(ResetDateTimeHandler);

  • パブリッシュされたイベントの EventHandler。

    private void ResetDateTimeHandler(bool cancelClicked) { ReportFromDateTime.Text = "デフォルトにリセット"; }

上記のコードでわかるように、[キャンセル] ボタンをクリックするとテキストがリセットされます。

デバッグ中に、Text プロパティが「デフォルトにリセット」に変更されているのを確認できましたが、UI にはこれらの変更が表示されません。

ここに奇妙な部分があります:

WindowsFormsHost コントロールのChildプロパティは、実際の "ReportFromDateTime" Textbox コントロールとは異なります。

デバッグ中に、WindowsFormsHost コントロールの Child プロパティと Name プロパティが異なることがわかりました。Name プロパティが空です。

むしろReportFromDateTimeである必要があります。

Host コントロールと Child コントロールが再作成されているようです。

私が見る限り、追加レベルのネスト(WinForms-ElementHost-WPF-WindowsFormsHost-Winforms Textbox)が、WPF と Winforms 間の相互運用中に問題を引き起こしている可能性があると思います。
私は多くの調査を行い、提案のために多くのリンクを検索しました。この問題を指摘しているものはありませんでした。それらのいくつかは近くにありました。ここにいくつかのリンクがあります:

これは、「Surrogate Windows Forma Message Loop」セクションでメッセージ ループを再現することを示唆しています。

ネスティングセクションの下のネスティングの問題を説明するもう1つのリンクがあります。

冗長で申し訳ありません。私の問題を明確に理解してもらいたかっただけです。投稿に関してご不明な点がございましたら、お気軽にお問い合わせください。どんな提案でも大歓迎です。

編集

この問題は解決できましたが、それでも回避策です。この問題を解決するには 2 つの方法がありましたが、どちらも static の使用に関連していました。

静的 Winforms コントロール:

次の静的 Winforms コントロールを使用しました

「実際の」コントロールのOnChangedイベントでは、実際のコントロール ReportFromDateTime を静的コントロール ReportFromDateTimeInstance にダンプします。

それ以降、(メソッドのように)実際のコントロールを更新するたびに、静的コントロールを更新します。ResetDateTimeHandler

これは、フロントエンドで更新された値を示しています

静的 EventAggregator

この回避策は、同僚の 1 人によって提供されました。

この場合、静的コントロールではなく、実際のコントロールReportFromDateTimeを使用しています。ControlHolder.ReportFromDateTimeInstance

Unity Container が提供するイベント アグリゲーター インスタンスを使用する代わりに、ResetDateTimeEvent の発行/サブスクライブに静的イベント アグリゲーターを使用しました。だから、代わりに

使用したもの:

そしてサブスクリプションで:

Unity Container によって提供されるインスタンスを使用しているため (これにより、単一のインスタンスがすべての ViewModel で共有されるようになります)、このシナリオでは静的イベント アグリゲーターを使用する必要がないことはわかっていますが、これにより問題も解決されました。

そのため、上記の 2 つのシナリオで問題が解決される理由について、私はまだ混乱しています。問題を解決しているのは静的ですか?

すでに述べたように、コントロールが再作成されていると感じており、コントロールを手にするまでに、それらはすでに再作成されています。

どんな提案でも大歓迎です。

0 投票する
0 に答える
28 参照

vb.net - ElementHost のメディアを途中でリサイズしないようにするにはどうすればよいですか?

ElementHost を使用してビジュアル スタジオでメディア プレーヤーを作成しましたが、開始時にメディアのサイズが途中で変更されます。これを修正するにはどうすればよいですか?

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

c# - MMC スナップインで WPF TabControl の境界線が正しくレンダリングされない

MMC スナップインの一部である Windows フォーム内で WPF TabControl をホストしています。Windows 8.1 ではすべて問題なく表示されます。

ここに画像の説明を入力

しかし、Windows Server 2012 R2 には問題があります。

ここに画像の説明を入力

上から、TabControl の境界線が増えていることがわかります。また、他の WPF タブ項目のいくつかで他の問題に気付きました (リスト ビュー項目が中央ではなく上部に垂直に配置されているなど)。しかし今のところ、2 倍の太さの境界線の問題に対処しましょう。なぜこれが起こったのですか、どうすれば修正できますか? この問題について何時間も Google に問い合わせてみましたが、適切な回避策や修正方法が見つからないようです。また、インバウンド テキストの下にも境界線が表示されていることに注意してください。これはおかしくないですか?

Windows フォーム内で WPF コントロールをホストするためElementHostに、ダイアログのオブジェクト部分の子コントロールを WPF コントロールに設定します。

私の WPF コントロールでは、特別なことや異常なことは何もしていません。XAML でタブ コントロールを作成します。

次に、WPF コントロールのコンストラクターでタブ項目を設定します。

編集:TabControl(<TabControl Margin="10 10 10 0" BorderThickness="0">)に0の厚さを設定すると、次のようになります。

ここに画像の説明を入力

TabControlWindows Server 2012 R2のコントロールの一部として、拡大された境界線がこのようにレンダリングされていることは確かですが、これはなぜでしょうか? 拡大されるのはなぜですか?どうすれば修正できますか?

BorderThickness を 1 に設定すると、拡大された境界線の問題が明示的に修正されますが、ヘッダー テンプレート自体に下の境界線があるか、ヘッダーの下側に 2 倍のサイズの下の境界線があるヘッダー テンプレートは修正されないため、Blend を起動して編集する必要があると思いますこれらのテンプレートを手動で下の境界線を削除しますが、これはまったく正気ではありません。Server 2012 でこの問題が発生するのはなぜですか?

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

wpf - ElementHost blocks mouse events

NOTE: I AM TRYING TO SOLVE THE MOUSE ISSUE, NOT THE KEYBOARD PROBLEM, WHICH IS ALREADY SOLVED

So I am creating a Visual Studio 2015 extension, working on the Options pages.

I am using WPF, so I use ElementHost to host a UserControl. At first it wasn't receiving keyboard events, so I implemented the solution at:

WPF TextBox not accepting Input when in ElementHost in Window Forms

A quick run down of the solution:

A) on the UserControl's Loaded event, I do:

B) In ChildHwndSourceHook(), I do something like:

HOWEVER, now mouse over events seem to be being ignored, as the cursor doesn't change when moving it over textboxes or grid splitters, not even on new Windows I create. Very occasionally, though, the mouse events do work, though, and continue to work until I move to another page or close the dialog. That's the weirdest part.

I've tried everything and have scoured Google all day, but I am no closer to understanding why clicks work fine, but mouse over events don't seem to be registered.

I did try REMOVING the message handler, then opening a Window, but it seems once the handler is added, removing it won't fix anything.

Does anyone know how I can get mouse over events to work on my controls? Thanks so much!