問題タブ [itemspaneltemplate]

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 投票する
12 に答える
25583 参照

.net - ItemsPanelTemplate として Grid を使用する ListBox で奇妙なバインディング エラーが発生する

ListBox コントロールがあり、一定数の ListBoxItem オブジェクトをグリッド レイアウトで表示しています。そこで、ItemsPanelTemplate をグリッドに設定しました。

コード ビハインドからグリッドにアクセスして、RowDefinitions と ColumnDefinitions を構成しています。

これまでのところ、すべてが期待どおりに機能しています。各 ListBoxItem が表示される Grid.Row と Grid.Column を返すためのカスタム IValueConverter 実装がいくつかあります。

ただし、奇妙なバインディング エラーが発生することがあります。エラーが発生している理由や、コード内にエラーがあるかどうかさえも正確にわかりません。

エラーは次のとおりです。

System.Windows.Data Error: 4 : Cannot find source for binding with reference 'RelativeSource FindAncestor, AncestorType='System.Windows.Controls.ItemsControl', AncestorLevel='1''. BindingExpression:Path=HorizontalContentAlignment; DataItem=null; target element is 'ListBoxItem' (Name=''); target property is 'HorizontalContentAlignment' (type 'HorizontalAlignment')

誰が何が起こっているのか説明できますか?

ああ、これが私の XAML です。

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

wpf - WPF - リストボックス項目が均一グリッドを埋めない理由

ItemsPanelTemplate が行 = 6 および列 = 7 の UniformGrid に設定されたリストボックスがあります。

リストボックスの項目でスペースを埋めたい。

辞書で定義されたデータテンプレートを使用しています。

テンプレートの外側のコントロールは、Horizo​​ntalAlignment=Stretch および VerticalAlignent=Strectch の Border ですが、テンプレートがリストボックス項目のスペースを埋めませんか?

何か案は?マルコム

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

wpf - ItemTemplateとItemPanelTemplateの違いは何ですか?

WPFでは、これら2つの概念とListbox混同して います。誰かが私にもっと説明してもらえますか?ItemTemplateItemsPanelTemplate

ありがとうジョン

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

c# - アイテムの表示方法を変更する WPF リスト ボックス

を表示する WPF ウィンドウがありますListBoxListBoxの項目テンプレートを変更して、リスト ボックスに選択可能な長方形の項目が表示されるようにしました。

ここで、アイテムが縦または横のリストではなく、グリッドに表示されるListBoxように を変更したいと思います。具体的には、次のアイテムの高さがアイテムの列をそれ自体の高さよりも高くするまでItemsPanelTemplate、最初のアイテムを右上隅に配置し、次にその下に 2 番目のアイテムを配置し、その下に 3 番目のアイテムを配置したいと考えています。その時点で、追加された最初の項目のすぐ右にある 2 番目の列を開始する必要があります。結合されたすべての列の合計幅が の幅よりも大きい場合、水平スクロール バーが表示されます。ListBoxListBoxListBox

を変更するだけでその効果を得る方法はありますか、それともクラス自体ItemsPanelTemplateを拡張する必要がありますか? ListBoxいずれにせよ、どうやってそれを手に入れたのでしょうか?

ご協力いただきありがとうございます!

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

c# - カスタムItemsPanelテンプレートを使用したWPF ListBoxは、アイテムのサイズに基づいてサイズを変更する方法

これは、これに対するフォローアップの質問で、回答済みです。

コードの使用:

アイテムが列に左から右に入力され、特定の列の最後のアイテムが切り落とされないリストを作成できますListBox(つまり、アイテムが収まりきらない場合、アイテムは次の列の一番上に移動されます)。Widthを動的に調整してListBoxアイテムを「フィット」させ、同じ動作を水平に取得するにはどうすればよいでしょうか。したがって、次のように仮定します。

与えられたで、すべてのアイテムに適合Heightするのに 1 つだけ必要な場合、の は の のサイズである必要があります。ColumnWidthListBoxWidth

または、与えられHeightた 4 つColumnの s が必要な場合は、アイテムの 4 倍のサイズにする必要がありWidthます。

最後に、与えられた で の最大許容数よりも多くの s が必要であるとHeightします。その場合、 s 内の収まりきらないアイテムが切り捨てられずに表示されないように、その幅を計算する必要があります。ユーザーが右にスクロールするまで。ColumnWidth ListBoxColumn

ご協力いただきありがとうございます!!

編集:

上記を表現するより簡単な方法は、リスト内のアイテムの「クリッピング」を回避する方法を探しているということだと思います。アイテムをグリッドに表示するリストを作成したいのですが、一部のアイテムが部分的に覆われており、そのアイテムの残りを表示するには右または左にスクロールする必要があるため、スクロールする必要はありません (ただし、リストは幅または高さが非常に大きくなる可能性があり、すべてを表示するためにスクロールする必要があるアイテムが十分にある場合は、表示されたアイテムだけが完全に表示されるはずです)。また、リストの最初の描画だけを気にします。常にフィットするようにアイテムを「スナップ」する必要はありませんが、表示するアイテムで利用可能なスペースを完全に埋めるようにスクロールできる必要があります。

これを行うための鍵は、実行時のリストアイテムのサイズとリストボックス内のコンテンツコンテナーのサイズを把握することであり、リストが最初に表示される前に一度に非常に多くのアイテムに完全に収まるように調整できるように思えました描かれた?

ありがとう!

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

wpf - ListBoxのコンテンツをサイズ変更するのに問題があります

ここでストレッチに関する提案を試しましたが、うまくいきませんでした。

基本的にItemsPanelを備えた単なるリストボックスであるUserControlをホストするTabItemがあります。ItemsPanelは、ListBoxにその内容を水平方向に表示するように強制します。ListBoxの内容は、ObservableCollection<StackPanelContents>別のUserControlであるにデータバインドされます。 StackPanelContentsそれ自体は基本的に、List視覚化されたオブジェクトを含むだけです(視覚化のためのUIElementが含まれています)。

一般に、コードは、に含まれているすべてのデータをレンダリングするという点で適切に機能しますObservableCollectionが、問題は、ウィンドウが拡大または縮小されたときにアイテムのサイズが変更されないことです。

クラス階層がどのように見えるかの概要は次のとおりです。

代替テキスト

そしてここに結果があります:

代替テキスト

メインウィンドウのXAMLには、TabControlとTabItemがあります。

StackPanelContentsを表示するListBoxContainerXAMLは次のようになります。

また、StackPanelContentsUserControlは次のようになります。

これが自動的にサイズ変更されない理由と、これを解決する方法を誰かが説明できますか?これに対処するために独自のカスタムパネルを作成し、使用する必要がMeasureOverrideありArrangeますか?

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

wpf - ListViewのItemsPanelTemplateであるグリッド内の空のセルにコントロールを追加します

ItemsPanelTemplateとしてグリッドを持つWPFListViewがあります。アイテムのプロパティに基づいて、アイテムを正しい列と行に表示します。しかし、グリッドの空のセルにいくつかのコントロールを配置したいと思います。

これは私のコードとxamlの簡略化されたバージョンです:

リソース内:

xamlの場合:

最後に、私のCustomListViewで:

注:DomainObjectにキャストしていることはわかっていますが、ご容赦ください。

これで得られるのは、正しい行と列にアイテムがあるグリッドです。しかし、空のセルに何かを表示したい場合はどうなりますか?たとえば、「null」のようなテキストはどうなりますか?

これをテンプレートに追加することはできません。これは、ItemsControlが必要なコントロールを作成すると言って、アプリケーションをクラッシュさせるためです。コードビハインドでグリッド/テンプレートにアクセスしようとしましたが、その方法がわかりません。たぶん私はListViewを使うべきではありませんか?多分他の/より良い解決策がありますか?

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

wpf - WPF ListBox のグループパネル

GroupStyle でアイテムをグループ化するリストボックスがあります。すべてのグループを保持するスタックパネルの下部にコントロールを追加したいと思います。この追加のコントロールは、ユーザーがリストの一番下までスクロールしてコントロールを表示できるように、スクロール コンテンツの一部である必要があります。グループなしでリストボックスを使用していた場合、このタスクは ListBox テンプレートを変更することで簡単になります。ただし、アイテムがグループ化されている場合、ListBox テンプレートはグループごとにのみ適用されるようです。GroupStyle.Panel を変更できますが、そのパネルに項目を追加することはできません。

これにより、私が何をする必要があるかがわかります。

グループ スタイルのニーズ

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

wpf - 各要素を一意の場所に表示するように WPF の ItemsControl を設定するにはどうすればよいですか?

私はブラックジャック プログラムを構築しており、現在ハンド ディスプレイに取り組んでいます。

カードを表示するために、内部に ItemsControl を持つ PlayerSeat UserControl があります。ブラックジャックの通常のゲームと同様に、カード (私の場合は画像) が互いに重ねられます。さまざまなゲーム アクション (スプリット、ダブル ダウンなど) では、画面上のカードのレイアウトを変更する必要があります。ItemsControl の ItemSource プロパティはObservableCollection<Card> Hand、プレーヤーの ViewModel の " " プロパティです。Card オブジェクトには、Card イメージを含む BitmapSources が含まれています。

私が望むものを達成する方法について、いくつかのWebページ(投稿の最後を参照)に目を通しました。2つのオプションのうちの1つを行う方法を探しています。

  1. (推奨) 各「ハンド モード」(スプリット、ダブル ダウンなど) のレイアウトを指定し、ハンド ( OC<Card>) の各インデックスを配置する場所を指定します。たとえば、ハンドの最初のカードの場合、ソースが Hand[0].CardImage にバインドされた Image コントロールを (X1, Y1) に配置し、次に Hand[1] Image を (X2, Y2) に配置します。これは、ItemsControl で何らかのバインドされたテンプレート プロパティ (ハンド モード間で変更するため) を設定することによって最適に調整できます。

  2. (フォールバック) Source プロパティがバインドされたすべての Image コントロールを表示します。これらの画像の Top/Left プロパティを Hand[0].Top/Left にバインドし、Hand クラスで配置計算を行います。

私は自分で問題を調査せずに質問する人ではありません。StackPanel で ItemsPanelTemplate を使用する必要があるようですが、どこから始めればよいかわかりません。重要なのは、画像を重ねて、必要な場所に配置することです。あなたが私の問題に当てることができる光は役に立ちます.

参照: http://drwpf.com/blog/itemscontrol-a-to-z/ (具体的には「ItemsControl: 'P' は Panel 用です」)

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

wpf - グループ化されたCollectionViewのグループを水平に表示できますか?

この回答のとおり、ItemsPanelがWrapPanelであるListBoxを実装していますが、ひねりがあります。私のItemsSourceはグループ化されたCollectionViewです。リストボックスにGroupStyle適用すると、その質問に示されているラッピングは機能しません。グループは常に垂直に表示されます。

私のアプリをスヌーピングしている理由は次のとおりです

GroupItemにWrapPanelを表示するスヌープ

ご覧のとおり、ListBoxのItemsPanelTemplateとして定義されているWrapPanelは、各GroupItem内のItemsPresenterに表示されます。GroupItem自体を含むために、暗黙の垂直方向のStackPanel(ピンク色のボックスの一番上のアイテム)が作成されます。

この動作をオーバーライドして、GroupItemsをWrapPanelに配置する方法はありますか?ListBox全体を再テンプレート化する必要がありますか?

更新: ListBoxとCollectionViewグループ化で実際に行っていることを説明するために、少しXAMLを投稿しましょう。

これGroupStyleはその中心です。これを削除すると、GroupItemsはレンダリングされず、スクリーンショットの(StackPanel)98の代わりにWrapPanel(上のスクリーンショットのGroupItemの下に表示されます)が表示されます。