10

ListBoxItemWPF では、 に を指定することで、任意のListBoxUIを に追加できItemTemplateます。

 <ListBox ItemsSource="{Binding}">
            <ListBox.ItemTemplate>
                <DataTemplate>
                    <Border BorderThickness="1" BorderBrush="Gray" CornerRadius="8" Padding="4,0,4,0">
                        <Grid>
                            <Grid.ColumnDefinitions>
                                <ColumnDefinition Width="50"/>
                                <ColumnDefinition/>
                            </Grid.ColumnDefinitions>

                            <Grid.RowDefinitions>
                                <RowDefinition/>
                                <RowDefinition/>
                                <RowDefinition/>
                            </Grid.RowDefinitions>

                            <CheckBox Grid.Column="1" Content="Is Active Customer" IsChecked="{Binding IsActive}"/>

                            <Label Content="Id:" Grid.Row="1" HorizontalAlignment="Right"/>
                            <Label Content="Name:" Grid.Row="2" HorizontalAlignment="Right"/>

                            <TextBox Text="{Binding Id}" Grid.Row="1" Grid.Column="1"/>
                            <TextBox Text="{Binding Name}" Grid.Row="2" Grid.Column="1"/>
                        </Grid>
                    </Border>
                </DataTemplate>
            </ListBox.ItemTemplate>
        </ListBox>

結果:

ここに画像の説明を入力

Windows フォームで同じことを達成する方法はありますか?

編集:

1 - Windows フォームで同じことを達成する方法はありseparation of concernsますViewか?Application LogicView

2 - winforms はデータ バインディングをサポートしており、それぞれをListBoxItemscomplex にバインドできますEntity。最終的には Model データから UI データへの中間型変換を含み、大量に記述する必要はありません。ビューにデータを入力し、UI 値をモデルに戻して保存するボイラープレート コードはありますか?

3 - 現在が、多くの追加情報を表示できるある種の「行の詳細」モードに自動的に拡張さAnimationsれるような方法で紹介したい場合はどうすればよいですか?SelectedItem

4 - winformsUI Virtualizationは、たとえば 100 万個のアイテムがある場合、UI をロードするのに一生かからず、画面に表示されているものだけをレンダリングするようにサポートしていますか?

5 - 方程式に複雑なグラフィックを導入したいとします。winforms レンダリングはハードウェア アクセラレーションですか?

Resolution Independent6 -小さい画面との互換性を維持しながら大きな画面を活用するために、ListBox とそのすべてのコンテンツが使用可能なウィンドウ サイズに拡大されるようにするにはどうすればよいですか?

ListView7 -通常の の代わりにコントロールを使用することが提案されていますがListBoxListViewUI を追加する機能はありますか? たとえば、アイテムごとにビデオを追加できますか? または、保存および編集ボタンを備えた複雑なマスター/詳細テンプレートですか?

8 - winforms は、忠実度の高い WYSIWYG ドキュメントやその他の種類のリッチ コンテンツの作成を可能にする、一貫した適切なドキュメント モデルを提供しますか?

4

2 に答える 2

21

包括的な質問 - WinForms でこれを行う方法 - に答えるには、次のことをお勧めします。

  1. ElementHost にラップされた WinForms アプリケーションで WPF ListBox を使用します。これには独自の問題がありますが、望ましい効果を得るための最もクリーンな方法だと思います。

    それが法案に合わない場合は、

  2. これをサポートするコンポーネントを持つサード パーティのコントロール スイートを使用します (Infragistics と DevExpress の両方がサポートします)。

  3. ペイントなどをオーバーライドする独自の派生 ListBox コントロールをスピンして、目的のコンテンツをレンダリングします。

個々の質問に対して:

  1. Windows フォームで同じことを達成する方法はありseparation of concernsますViewか? Application LogicView
    以前は、Windows フォームで MVP (モデル ビュー プレゼンター) パラダイムを使用していました。これは、ビューをビジネス ロジックから分離するために機能しますが、WPF を使用した MVVM アプローチほど明確ではありません。私ができる最善のアドバイスは、イベント ハンドラーにビジネス ロジックを入れないことです。

  2. winforms は、私のそれぞれが複雑な にバインドできるような方法でデータバインディングをサポートしていますかListBoxItems?Entityビューにデータを入力し、UI 値をモデルに戻して保存するにはどうすればよいですか?
    いいえ。Windows フォームのデータ バインディングは、複雑なデータ バインディングをサポートしていません。ICustomTypeDescriptor または IBindingSource を介して、複雑なパスを取り、それらをバインド目的で評価できるものを自分で実装できますが、すぐに使用できるものはありません。

  3. Animations現在SelectedItem、多くの追加情報を表示できるある種の「行の詳細」モードに自動的に拡張するような方法で導入したい場合はどうすればよいでしょうか?
    独自の Windows フォーム ListBox と ListBoxItems をロールして、ペイント操作をオーバーライドする必要があります。

  4. winformsUI Virtualizationは、たとえば 100 万個のアイテムがある場合、UI をロードするのに一生かかることはなく、画面に表示されているものだけをレンダリングするようにサポートしていますか?
    すぐに使用できるわけではありませんが、一部のサードパーティのコントロール スイートには、仮想化の種類をサポートするコンポーネントがありますが、WPF とはまったく異なります。

  5. 方程式に複雑なグラフィックを導入したいとします。winforms レンダリングはハードウェア アクセラレーションですか?
    Windows フォームは GDI+ に基づいています。GDI+ はハードウェア アクセラレーションではありません: Windows フォームは Windows7 で非常に遅いですか?

  6. Resolution Independent小さい画面との互換性を維持しながら大きな画面を活用するために、ListBox とそのすべてのコンテンツが使用可能なウィンドウ サイズに拡大されるように、これらすべてを作成するにはどうすればよいでしょうか?
    これを行うには、Windows フォームでドッキングとアンカーを使用できます。または、カスタム イベント ハンドラーを追加して、解像度とウィンドウ サイズに基づいて適切なレイアウト調整を実行することもできます。

  7. ListView通常の の代わりにコントロールを使用することが提案されていますが、UI を追加する機能ListBoxはありますか? ListViewたとえば、アイテムごとにビデオを追加できますか? または、保存および編集ボタンを備えた複雑なマスター/詳細テンプレートですか?
    これは単純化しています...しかし、ListViewは複数のビュータイプをサポートする単純なListBoxです。また、データバインディングに関してもより制限されています。http://blog.gfader.com/2008/09/winforms-listbox-vs-listview.html .

  8. winforms は、忠実度の高い WYSIWYG ドキュメントやその他の種類のリッチ コンテンツの作成を可能にする、一貫した適切な [ドキュメント モデル][2] を提供しますか?
    いいえ、まったくありません。少しでもありません。

要するに、それが許容できる解決策である場合、WPF ListView を ElementHost でラップして、1 日と呼びます。

于 2013-03-23T06:20:54.980 に答える
1

これは、スクロール可能なパネルで UserControls を使用して行いました。すべての編集コントロールを持つユーザー コントロールを用意しました。dosk プロパティが Top に設定されているスクロール可能なパネルにそれらを追加します。追加されたユーザー コントロール項目のフォーカスおよびクリック イベントを監視することにより、項目選択動作を実装しました。

于 2013-03-27T14:27:11.463 に答える