私は周りを見回して、いくつかのことを見つけましたが、ドロップダウン領域に2つの列が表示されたコンボボックスに固執しました. 利用可能なxamlテーマがあり、コンボボックスの「スタイル」が定義されており、期待どおりにうまく機能するので、その部分は問題ありません。
これで、2 つの値を表示する必要があるコンボボックスができました。これは、アイテムの DataTable.DefaultView バインディング ソースから取得した、ドロップダウンの State Abbreviation と State Name と考えてください。
私が持っている場合
<my:cboStates TextSearch.TextPath="StateAbbrev">
<ComboBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal" TextSearch.Text="{Binding Path=StateAbbrev}">
<TextBlock Text="{Binding Path=StateAbbrev}"/>
<TextBlock Text="{Binding Path=FullStateName}" Margin="10 0"/>
</StackPanel>
</DataTemplate>
</ComboBox.ItemTemplate>
</my:cboStates>
これは機能します。さて、どのように/どこで立ち往生しています...今、私はこの同じ機能を5つの異なるフォームとすべてに同じコンテンツを表示させ、変更された場合(これではなく、他の複数列コンボボックスの場合)、これをフォームの XAML ファイルに直接入れ続ける必要はありません。
テーマのリソース ディクショナリ ファイルに入れて、その「スタイル」を何度も再利用したいと考えていました。理にかなっています。ただし、バインディングがデータテーブルにある場合、スタイルとして実行しようとしたときに得られる唯一の結果は、ドロップダウンに次の値が表示されることです
System.Data.DataRowView
System.Data.DataRowView
System.Data.DataRowView
System.Data.DataRowView
実際の 2 列の代わりに。「テーマ」リソース ディクショナリにあるものを次に示します。
<DataTemplate x:Key="myStateComboTemplate" >
<StackPanel Orientation="Horizontal" >
<TextBlock Text="{Binding Path=StateAbbrev}"/>
<TextBlock Text="{Binding Path=FullStateName}"/>
</StackPanel>
</DataTemplate>
<Style x:Key="StyleMyStatesCombobox" TargetType="{x:Type ComboBox}"
BasedOn="{StaticResource MyOtherWorkingComboBoxStyle}" >
<Setter Property="TextSearch.TextPath" Value="{Binding Path=StateAbbrev}" />
<Setter Property="ItemTemplate" Value="{StaticResource myStateComboTemplate}" />
</Style>
したがって、フォーム上に作成された「cboStates」クラスの 2 つのインスタンスがあり、1 つを最初にリストされた明示的なスタイリングに設定し、2 つ目を「スタイル」設定に基づいて設定すると、2 つ目は繰り返される System.Data のみを表示することによって失敗します。 .DataRowView エントリであり、実際のデータ コンテンツではありません。
何が欠けていますか。
だから、私が探しているものを明確にするために...状態... ex data
AL Alabama
AK Alaska
AZ Arizona
AR Arkansas
CA California
CO Colorado
CT Connecticut
DE Delaware
コンボボックスに省略された AL、AK、AZ などと、より狭いコンボボックスを表示したい。これは、返されたときに「SelectedValue」にもなります。
実際のドロップダウンは、状態の略語と詳細な説明の両方を示す上記のデータを表示します。
目的のコンボボックスのサンプル