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

c# - ElementHost の再描画

WinFormsアプリケーションでAvalonEditを使用しています。AvalonEditは、 ElementHostを持つコントロールに配置されます。アプリケーションにはTelerik のRadDockがあり、そのウィンドウに AvalonEdit を配置できます多くの場合、ElementHostの再描画で問題が発生します。すべての症状を把握しているわけではありませんが、フォーカスを変更し、他のウィンドウをエディター上に移動することで、この問題を再現できます。この後、アプリケーションのすべての WPF コントロールが壊れて再描画できなくなります。ElementHostを強制的に再描画する唯一の方法リサイズ中です。たとえば、幅を変更すると、WPF コントロールが再描画されます。しかし、この「解決策」は受け入れられません。この問題は、x64 および x86 マシンで、ドッキング ウィンドウまたはフローティング ウィンドウ、アクティブなスクロールバーの有無にかかわらず、ウィンドウで再現できます。ElementHostを「修正」するには、アプリケーションを再起動する必要があります。
誰か私に提案はありますか?

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

c# - ElementHost + FlowDocument = GC が機能していない、メモリが増え続ける

[更新、下部を参照してください!]

FlowDocumentReaderで WPFをホストしている WinForms アプリケーションにメモリ リークがありますElementHost。この問題を単純なプロジェクトで再現し、以下のコードを追加しました。

アプリケーションの機能

押すとbutton1

  • UserControl1のみを含むがFlowDocumentReader作成され、 に設定されElementHostますChild
  • FlowDocumentテキスト ファイルから作成されます (数千行の とFlowDocumentが含まれているだけです) 。StackPanel<TextBox/>
  • のプロパティはこれに設定されていFlowDocumentReaderますDocumentFlowDocument

この時点で、ページはFlowDocument正しくレンダリングされます。予想通り、大量のメモリが使用されます。

問題

  • をもう一度クリックするbutton1と、メモリ使用量が増加し、プロセスが繰り返されるたびに増加し続けます! 大量の新しいメモリが使用されているにもかかわらず、GC が収集されません! 次の理由により、そこにあってはならない参照はありません。

  • whichを nullbutton2に設定elementHost1.Childして GC を呼び出すと (以下のコードを参照)、別の奇妙なことが起こります。メモリはクリーンアップされませんが、数秒間クリックし続けると、最終的にメモリが解放されます!

このすべてのメモリが使用されたままになることは、私たちにとって容認できません。また、コレクションElementHostからを削除し、参照を null に設定してから GC を呼び出しても、メモリは解放されません。ControlsDisposing

私が欲しいもの

  • が複数回クリックされた場合button1、メモリ使用量が増え続けることはありません
  • すべてのメモリを解放できるはずです (これは「実際の」アプリケーションの 1 つのウィンドウにすぎず、閉じているときにこれを実行したい)

これは、メモリ使用量が問題にならないものではなく、いつでも GC に収集させることができます。実際には、マシンの速度が著しく低下します。

コード

VS プロジェクトをダウンロードしたい場合は、ここにアップロードしました: http://speedy.sh/8T5P2/WindowsFormsApplication7.zip

それ以外の場合は、関連するコードを次に示します。デザイナーでフォームに 2 つのボタンを追加し、それらをイベントに接続するだけです。Form1.cs:

UserControl1.xaml

編集:

私はついにこれに再び対処する時間ができました。私が試したのはElementHost、ボタンを押すたびに再利用する代わりに、破棄して再作成することです。これは少しは役に立ちますが、ボタン 1 をクリックするだけでメモリが上がるのではなく、スパム クリックするとメモリが上下するという意味では、それでも問題は解決しません。フォームは閉じています。だから今、私は賞金を上げています。

ここで何が問題なのか混乱しているように見えるので、リークを再現するための正確な手順は次のとおりです。

1) タスクマネージャーを開く

2) 「開始」ボタンをクリックしてフォームを開きます

3) 「GO」ボタンを 12 回または 2 回クリックしてスパムし、メモリ使用量を監視します。これで、リークに気付くはずです。

4a) フォームを閉じます -メモリは解放されません。

また

4b)「CLEAN」ボタンを数回スパムすると、メモリが解放されます。これは、これが参照リークではなく、GC/ファイナライズの問題であることを示しています

私がする必要があるのは、ステップ 3) でリークを防止し、ステップ 4a) でメモリを解放することです。「CLEAN」ボタンは実際のアプリケーションにはありません。隠し参照がないことを示すためだけにここに表示されています。

「GO」ボタンを数回押した後、CLR プロファイラーを使用してメモリ プロファイルを確認しました (この時点でのメモリ使用量は ~350 MB でした)。16125 (ドキュメント内の量の 5 倍)Controls.TextBoxと 16125があり、どちらもファイナライズ キューにルートされているControls.TextBoxView16125オブジェクトにルートされていることがわかりました。こちらを参照してください。Documents.TextEditor

http://i.imgur.com/m28Aiux.png何とか

任意の洞察をいただければ幸いです。

別の更新 - 解決済み (一種)

ElementHostまたは を使用しない別の純粋な WPF アプリケーションでこれに再び遭遇したFlowDocumentので、振り返ってみると、タイトルは誤解を招くものです。Anton Tykhyy が説明したように、これは単に WPFTextBox自体のバグであり、そのTextEditor.

Anton が提案した回避策は好きではありませんでしたが、彼のバグの説明は、やや醜いが短い解決策に役立ちました。

を含むコントロールのインスタンスを破棄しようとしているときは、TextBoxes(コントロールのコード ビハインドで) これを行います。

どこFindVisualChildrenにある:

基本的に、私はTextBoxすべきことをします。最後に、私も呼び出しますGC.Collect()(厳密には必要ではありませんが、メモリをより速く解放するのに役立ちます)。これは非常に醜い解決策ですが、問題を解決しているようです。TextEditorsファイナライズ キューでスタックすることはもうありません。

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

wpf - ScrollBarが表示されても、WPFScrollviewerDesiredSizeは増加しません

を含むWPF UserControl(の内部ElementHostScrollViewerがありItemsControlます。はHorizontalScrollbarVisibilityに設定されてAutoいるため、スクロールが不要な場合は、ScrollBarが非表示になります。

私の要件は、ScrollBarが表示/非表示になった場合、ElementHostそれに応じて高さを調整することです。それを達成するために、私はSizeChangedイベントを聞いています。私はのを取得しDesiredSizeScrollViewer次にEventHandlerに渡しDesiredSize.HeightますElementHost

  1. 見える 2.3 隠れた正しくない、オーバーレイ

1つの方法として、これは機能します。ScrollBar表示されている場合(状況1)、ウィンドウを拡大して、すべてのアイテムItemsControlが表示され、ScrollBar消え、ElementHost高さが低くなるように調整します(状況2)。隠されDesiredSizeた瞬間に実際に小さくなりました。ScrollBar

ただし、逆の場合は機能しません。表示されない場合(状況2)、aが必要になりScrollBar、表示されるまでウィンドウサイズを縮小します。同じままで、調整されません(状況3)。ScrollBarDesiredSizeElementHost

何か案は?

これは、ScrollviewerいくつかのMVVMのものを含むのxamlですが、これにこだわる必要はありません。要点は、実際には、表示DesiredSizeされたときに増加しないのはなぜScrollBarですか?なぜ縮むだけなのか?

ScrollViewerスタイル(基本的にデフォルトのWPF):

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

c# - 透明に設定されている場合のコントロールの背景色が黒くなる

WPF elementHost の背景色に問題があります。パネルに UserControl(Winform) をロードする winform があります。そのユーザー コントロールには 2 つのパネルがあり、それぞれの内部に、WPF ユーザー コントロールをホストする elementHost があります。

画像はより役立つ場合があります。 ここに画像の説明を入力

ご覧のとおり、それぞれの背景色は BLACK ですが、要素は次のように表示されます。

ここに画像の説明を入力

これは、パネルに他の UserControls をロードしたときに発生したことに気付きました。これを修正する方法を知る必要があります。

各 elementHost の背景色は透明に設定され、BackColorTransparent は True に設定されています。また、実行時に背景色を変更しようとしましたが、それでも同じ問題です。

更新: わかりました、フォームのイベント Load でパネルに UserControl をロードすると、elementHost が正しくロードされることに気付きました。しかし、ボタン クリック イベントでパネルに UserControl をロードすると、その黒い背景色が表示されます。

動作:

動作しない:

明らかに、1 つの UserControl を使用している場合は、Load イベントを使用することが解決策になりますが、そうではありません。

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

c# - Winform ElementHost の MouseEnter イベント

WPF UserControl を含めるために、elementHost を含む Winform があります。私が必要とするのは、マウスが子ではなく elementHost に入ったときに何かをすることです。elementHost で MouseEnter イベントを使用しようとしましたが、存在しません。これができる可能性はありますか?それとも不可能なだけですか?それらにマウスイベントがないのは興味深いことです。

これは私が持っているすべてのイベントです:

ここに画像の説明を入力

プログラムで実行したい場合は、MouseEvent がありません。

ここに画像の説明を入力

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

c# - 要素ホストから要素を変更

私はDataGridいくつかの行を持っています:

2 つの winfrom のように座っDataGridて:ElementHost

あるウィンドウで行を非表示にしたいのですが、どうすればよいですか? (XAML を優先)。

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

wpf - wpf要素ホストをWinformにバインドする

私はwpf element host座っていwinfromます。

要素のプロパティをwinfromのプロパティにバインドしたいと思います。

検索で、winfromからwpfへのバインドという反対の解決策を見つけました(winがwpfにある場合)。

ここに例: WPFでWindowsコントロールをバインドする方法????

私もこの答えを見ました(正確には答えではありません、結論を言います):WinFormsでWPFホストコントロールのDependencyPropertyにバインドする

それは私を助けませんでした..

また、wpf要素ホストでMVVMの原則を維持したいと思います。

これを行う方法はありますか?

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

c# - c# windowsフォームプロジェクトのWPFコンポーネントのエラーを解決するには?

Windows C# プロジェクトを作成しました。Windows フォームが 1 つあります。同じプロジェクトで WPF コンポーネントを作成しましたが、このコンポーネントを Windows フォームに配置しようとすると、「コンポーネントの作成に失敗しました」というエラーが発生します。

エラーの詳細については、以下のリンクを確認してください。

1.ツールボックスからコンポーネントをドラッグしてこのエラーを形成すると、次のエラーが発生します。 ここに画像の説明を入力

2. ElementHost で WPF コンポーネントを選択しているときに、次のエラーが発生します。 ここに画像の説明を入力

これを助けてください。

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

c# - wpf 要素ホストのサイズを変更すると黒いフラッシュバックが発生する

としてWPF UserControl表示される があります。WinformElement Host

画面サイズをすばやく変更したり、サイズを変更したりすると、UserControl が適切なサイズになるまで、背景に黒いフラッシュバックが表示されます。

私はそれについていくつかの場所で読みました。

私がそれらを読んだすべての場所で、それはUserControl Loadでのみ発生し、それに応じてソリューションをもたらします。

Resizeで起こっていることについて話しているのを見た1つの質問。しかし、そこで提供される解決策はLoadにもあります。

elementhost のサイズ変更時の黒の背景

画面のサイズ変更で次のことを試してみましたUserControl.CreateGraphics ();。上記の回答のように黒い線は残りません。

LoadではなくResizeで使用したためだと思います。

その上、何も見つかりませんでした。

誰かがこれに遭遇して解決策を見つけた場合、私は答えたいと思います.