ComboBoxItemコンテンツに汎用スタイルを利用し、テキストコンテンツを基になるクラスのさまざまなプロパティにバインドしたいと考えています。ですから、これは私が思いつくことができる最高のものですが、バインディングはハードコーディングされています。したがって、このItemContainerStyleを使用してコンボボックスにバインドされたすべてのクラスに対して、「MainText」および「SubText」プロパティを実装する必要があります。
質問は、バインディングをソフトコーディングして、コンボボックスから参照されるスタイルで、基になるクラスのどの文字列プロパティを使用するかを指定できるようにする方法はありますか。
<Style TargetType="{x:Type ComboBoxItem}" x:Key="ComboBoxItemStyleA1">
<Setter Property="Template" >
<Setter.Value>
<ControlTemplate TargetType="ComboBoxItem">
<Border x:Name="BB" Padding="8,3,8,3" Background="DarkGreen">
<StackPanel Margin="0">
<TextBlock Foreground="White" FontSize="16" Text="{Binding MainText}"/>
<TextBlock Foreground="White" FontSize="8" Text="{Binding SubText}"/>
</StackPanel>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsSelected" Value="True">
<Setter Property="Background" TargetName="BB" Value="#FF256294"/>
<Setter Property="Foreground" Value="White"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
そして、スタイルを使用するには...
<ComboBox ItemsSource="{Binding Items}"
ItemContainerStyle="{StaticResource ComboBoxItemStyleA1}" />
さらにdowhileforの回答(多くの感謝-WPFは素晴らしいですが、確かに発見の航海です)
データテンプレートを使用して元々セルの外観を定義しました。次に、マウスオーバートリガーを指定できるコントロールテンプレートを定義したコンボボックスアイテムベースのスタイルを使用したいと考えました。つまり、これらは背景色などを変更するためのものでした。
Butj a)上記のテンプレートのBorderセクションを削除できませんでした-トリガーはtargettype="BB"によってそれに関連付けられています。そのため、データテンプレートがテンプレートバインディングから背景を取得するように、トリガーをコンテナーにバインドしたかったのですが、これをどのように組み込むかがわかりません。
b)トリガーのBB固有のバインディングをコメントアウトして実行するだけでも、コンボボックスは定義したDataTemplateを見つけて使用しないことに気付きました。私のcomboboxitemstyleでcontroltemplateを定義すると、datatemplateの取得が停止するようです。
ここで意味があることを願っています-肝心なのは、コボボックスアイテムの背景色を設定するトリガーで適用できるスタイルが欲しいということです。データが何であるかを知る必要はありません。つまり、この背景色に(テンプレート?)バインドするデータテンプレートをプラグインできる必要があります。
非常に速い応答に感謝します。
ところで、ItemContainerStyleをItemTemplateと組み合わせて使用しているので、ドロップダウンでコンボボックスリストに表示されるものとは異なる表現を使用できます。