問題タブ [itemspresenter]
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.
c# - WPF - ItemsPresenter の ItemTemplate を実装しますか?
私はWPFのSplitButtonコントロールに取り組んできましたが、基本的には完了しましたが、設定できるすべての可能なプロパティを調べて、それらが実際に実装されていることを確認しようとしています. ほとんどの場合、実装するプロパティは 2 つしか残っていません。それはItemTemplate
andですItemTemplateSelector
(そしてAlternationCount
3 つのプロパティ)。
とを にバインドすることで、HeaderTemplate
と を機能させることができました。ただし、これはコントロールのボタン部分用です。コントロールのドロップ ドロップ部分には、Popup、Border、および. 問題は、とのプロパティを設定する方法がわからないことです。HeaderTemplateSelector
ContentTemplate
ContentTemplateSelector
ContentPresenter
ItemsPresenter
ItemTemplate
ItemTemplateSelector
ItemsPresenter
何か案は?
更新: SplitButton の完全なソース コードは、http: //anothersplitbutton.codeplex.com/で入手できます。
Luna.NormalColor.xaml ファイルは次のとおりです。
更新 2 ItemsPresenter を ItemsControl に切り替えようとしましたが、ItemTemplate プロパティで何もできないようです。コードの変更されたセクションは次のとおりです。
wpf - ItemsPresenter が DataGrid のフォアグラウンド スタイルをオーバーライドするのはなぜですか?
App.xaml に DataGrid スタイルがあります。
これは、アプリケーション内のすべてのデータグリッドでうまく機能します。ただし、データグリッドの 1 つで、特定の列が同じ値を共有している場合、行をグループ化したいと考えています。したがって、その特定のデータグリッドで次を使用します。
問題:この DataGrid は、テキスト (前景) を私のスタイルではなく黒で表示することを除いて、私の DataGrid スタイルに基づいてすべてを正しく表示します。
解決策: ItemsPresenter を次のいずれかに変更することで、問題を解決できます (なぜこれが必要なのかわかりません)。
また
質問:なぜこれが起こるのか説明できますか、また、ItemsPresenter が DataGrid スタイルをオーバーライドしないことを保証するより良いソリューションを提供できますか?
ありがとうございました!
wpf - ItemsControlのItemPanelとしてのWrapPanel
まだWPFをいじくり回して、学習しながら進んでいます。コントロールの動的なグループ化を構築しようとしています(主にボタンですが、チェックボックスなどが含まれる場合があります)。
これを行うための最良の方法がわからなかったので、ItemsControlスタイルを作成してから、WrapPanel内のItemsPresenterにアイテムを追加してみました。すぐに、ItemsHostとして配置しない限り、アイテムがWrapPanel内に効果的に含まれていなかったため、アイテムがラップされないことに気付きました。このような:
これは進行中の作業であり、まだ実装する必要のある多くのスタイリング効果があることに注意してください。ここで私はそれを使用します:
また、UniformGridはここに行く方法ではなく、マージンが苦痛になる可能性があるため(重複するマージンはありますか?)、まだ作業中であることに注意してください。そこで入力していただければ幸いです。
さて、本当の問題に。これは機能しませんエラーが発生します:
「ItemsPresenter」オブジェクトを「WrapPanel」に追加することはできません。ItemsControlのItemsPanelとして使用されるPanelのChildrenコレクションを明示的に変更することはできません。ItemsControlは、Panelの子要素を生成します。オブジェクト'System.Windows.Controls.ItemsPresenter'でエラーが発生しました。
したがって、このようなことを行うための最良の方法は何ですか(ボタンやその他のコントロールをItemControlにスローして、本当に素晴らしいものに並べることができるようにしたいと思います)。コントロールをある種のコレクションに入れて反復する方がよいでしょうか。
それをうまくやりたいのですが、私のWPFスキルはまだ不足しています。基本を超えて教え、プロが実際にそれをどのように行うかを示すWPFの本はありますか?
silverlight - ItemsControl、ItemsPanel、ItemsPresenter(Silverlight、XAML)
私はこれらの3つの用語に完全に混乱していますが、いつどちらを使用するのですか?関係は何ですか、そして彼らはどのコントロールの子供ですか?
これが木であると言うのは正しいですか:
ItemsControl> ItemsPresenter> ItemsPanel
templates - ItemsPresenter のない ItemsControl (Silverlight)
ItemsControl を継承するコントロールを作成しましたが、作成したコントロールには、そのテンプレートの ItemsPresenter がありません。代わりに、グリッドがあります。次のようなリストを作りたいです。
(項目1)
(グリッドスプリッター)
(項目 2)
(グリッドスプリッター)
(項目3)
アイテム間に独自の GridSplitter を挿入する必要があるため、ItemsPresenter を使用して UI に入力させることはできません。
OnItemsChanged() メソッドをオーバーライドして、GridSplitter を追加/削除するロジックを記述できるようにします。ただし、ItemContainerGenerator クラスを使用して、Items の ItemTemplate を生成する必要があります。
しかし、コントロール テンプレートに ItemsPresenter がない場合、ItemContainerGenerator は機能していないようです。初めてアイテムを生成するために使用すると、DataTemplate を含む ContentPresenter が返されます。次に、私が持っているグリッドに挿入しました。ただし、画面にはアイテムが表示されません。別のアイテムを追加すると、グリッドに挿入するときにエラーがスローされ、そのアイテムが既にビジュアル ツリーにあるというメッセージが表示されます。それが、ItemContainerGenerator が ItemsPresenter なしでは機能しないと私が考える理由です。
そこで、Grid を ItemsPresenter に置き換えようとしました。今回は、下線ロジックを使用してアイテムを作成し、想定どおりに表示しました。しかし、それは私が望むものではありません。
ItemContainerGenerator を使用する理由は、Xaml で定義した ItemTemplate から UI 要素を作成する必要があるためです。
項目のコントロールの ItemTemplate を使用して UI を生成する方法はありますか?
wpf - ItemsPresenterをオーバーライドして、通常のスタックパネルの代わりに仮想化StackPanelを使用することは可能ですか?
バックグラウンド
TreeViewから継承し、データグリッドスタイルで表示するように変更されたカスタムコントロールがあります。私が見ている問題は、ツリーを拡張するときのパフォーマンスにあります。これは、ツリービューに関する私の調査から一般的です。WPFパフォーマンスツールで調べたところ、ItemsPresenterクラスが仮想化スタックパネルではなく通常のスタックパネルを使用していることに気付きました。
これは、ScrollContentPresenterが使用されるコードのセクションです(画像に表示されています)。
渡されるテンプレートは次のとおりです。
質問
アイテムプレゼンターに仮想化スタックパネルの使用を強制することは可能ですか?
ノート
- すでにItemsPresenterをScrollViewerでラップしようとしましたが、望ましくない結果が得られます(各行のスクロールバー)。
- オプションCanContentScroll=trueをテストとしてハードコーディングしました。これは、falseに設定すると仮想化が無効になるためです。
- このコントロールは本番環境にあり、複数の場所で使用されているため、現時点では、デザインを置き換えたり、書き換えたり、大幅な変更を加えたりすることはできません。可能であれば、この1つのセクションをオーバーライドすることを検討しています。
任意の提案やオプションは大歓迎です。
解決済み:
これをスタイルに追加してテンプレートのスタイルを変更すると、スタックパネルが仮想化に切り替わりました。
windows-phone-7 - ListBoxのControlTemplateをスタイルするときに仮想化を維持する方法は?
スタイリングが正しくないとListBox
、仮想化が失われることを読みました。この質問に対する notacat の回答として、彼の解決策は OK です。
ItemsPresenter をGrid
、Border
、 ...などの別のコンテナに入れるたびに気づきます。
ListBox
仮想化はすぐに失われます。TextBlock
しかし、 beforeを配置したいのですがItemsPresenter
、ScrollViewerは 1 つの子要素しか受け入れません。
これに対処する方法は?
更新: この投稿を見ました。Derek LakinはそれTextBlock
をScrollViewer
テンプレートに配置することですが、どのようTextBlock
に配置できScrollContentPresenter
ますか?
P / S:私は私のように設定VirtualizingStackPanel
しItemsPanel
ますListBox
。
c# - WPFでItemsPresenterをスタイルするには?
タイムライン ビュー ( this one )を含むプロジェクトがあります。このタイムライン ビューの背景を透明にする必要があります (その背後にある他のオブジェクト/コントロールをレンダリングしているため)。Opaque に色付けされている要素があるので、これを透明に変更する必要があります。
デバッグ実行中にビュー内の要素を調べると、変更が必要な要素は ItemsPresenter であることがわかります (下の画像を参照)。ItemsPresenter には StackPanel が含まれており、ライブ ビジュアル ツリーでプロパティを編集してこのスタックパネルの色を変更すると、問題が解決されます。
...グローバルまたはタイムラインで具体的に使用できる ItemsPresenter コントロールのスタイルを追加して、含まれるスタックパネルの背景を変更するにはどうすればよいですか? 例を挙げていただけますか?
助けてくれて本当にありがとうございます。