10

GUI 駆動型アプリケーションは、ビルド済みの WinForms ベースのコンポーネントをホストする必要があります。これらのコンポーネントは、GDI+ と DirectX を組み合わせて使用​​する高性能の対話型ビューを提供します。ビューはコントロール入力を処理し、カスタム グラフィカル レンダリングを表示します。コンポーネントは、サプライヤーによって WinForms ハーネスでテストされます。

商用アプリケーションで GUI に WPF を使用し、 WindowsFormsHostに依存して WinForms コンポーネントをホストすることはできますか? または、入力の遅延、慎重になるような更新の問題などの技術的な問題を経験したことがありますか?

4

6 に答える 6

21

現在、ソフトウェアでWindowsFormsHostを使用してWinForms DataGridViewコントロールをホストしていますが、実際の問題は発生していません。ただし、注意すべき点がいくつかあります。

1つ目は空域制限です。実際には、これはWinFormsコンテンツが常にWPFコンテンツの上に表示されることを意味します。したがって、WPF装飾を使用している場合、アプリのWinFormsリージョンにぶつかると、「トリミング」されているように見えます。

2つ目は、Windowsリソースを使用するため、WinFormsコンポーネントの存続期間をより慎重に管理する必要があるということです。WPFコンポーネントとは異なり、WinFormsコントロールは、終了時に破棄されることを想定しています。これにより、それらを純粋なXAMLビューに含めるのが難しくなります。

最後に、WinFormsコントロールは、他のWPFディスプレイほどスムーズにサイズ変更されていないようです。調整が完了すると、新しいサイズにスナップする傾向があります。

于 2008-09-10T12:25:02.293 に答える
4

私が遭遇した問題の1つは、埋め込まれたWinフォームコントロールが、WPFコンテナーに適用される変換操作に参加しないことです。これにより、視覚的な点滅効果が発生し、埋め込まれたコントロールが不適切な場所に表示されます。これを回避するには、Windowsフォームホストの可視性をWPFコンテナーのアニメーション状態にバインドし、次のように、アニメーションが完了するまで埋め込みコントロールを非表示にしました。

<WindowsFormsHost Grid.Row="1" Grid.Column="1" Margin="8,0,0,0"
     Visibility="{Binding ActualHeight, RelativeSource={RelativeSource
     Mode=FindAncestor, AncestorType=UserControl},
     Converter={StaticResource WinFormsControlVisibilityConverter}}" >

     <winforms:DateTimePicker x:Name="datepickerOrderExpected" Width="140"
        Format="Custom" CustomFormat="M/dd/yy  h:mm tt"
        ValueChanged="OnEditDateTimeOrderExpected" />

</WindowsFormsHost>
于 2008-09-16T07:26:29.340 に答える
0

@Kent Boogaartが述べたように、WinFormsでホ​​ストされているWPFアプリケーションにWPFアプリケーションオブジェクト(つまり、Application.Current)がないという状況に遭遇しました。これにより、ディスパッチャがUIスレッドにスレッドを呼び出さないなどの多くの問題が発生する可能性があります。これは、WinFormsでホ​​ストしている場合にのみ適用され、その逆ではありません。

また、モーダルダイアログが奇妙に動作する(つまり、ShowModal呼び出し)という奇妙な問題が発生しました。これは、WinFormsでは各コントロールに独自のWin32ハンドルがあるのに対し、WPFではウィンドウ全体にハンドルが1つしかないためだと思います。

何をするにしても、テストしてください:)

于 2008-09-10T12:28:30.443 に答える
0

空域の問題は、.net 3.5 SP1 を使用して解決できます。

これらのタイプの空域制限は、非常にリッチなユーザー エクスペリエンスを作成するために要素構成が使用される WPF などのフレームワークにおける大きな制限を表しています。D3DImage ソリューションを使用すると、これらの制限がなくなります。

D3DImage の概要を参照してください。

于 2008-09-10T15:15:37.390 に答える
0

問題なく WinForms で WPF コントロールをホストし、その逆も同様でした。ただし、複雑なコントロールがどのように動作するかを予測するのは難しいため、そのようなシナリオを広範囲にテストします。

于 2008-09-10T11:32:52.230 に答える
0

Winforms でホストする場合、WPFApplicationオブジェクトがないことに注意してください。これは、既存の WPF コンポーネントを取得して Winforms でホストしている場合に問題が発生する可能性があります。これは、リソース ルックアップなどがアプリケーション スコープ内で検索されないためです。Application問題がある場合は、独自のオブジェクトを作成できます。

于 2008-09-10T12:12:29.047 に答える