コンボボックスのテキストボックス部分に条件付き書式(フォントの色のみ)を追加したいと思います。MSDNによると、これは「PART_EditableTextBox」要素です。SOをすばやく検索して始めましたが、問題が発生しました。テンプレート全体が上書きされます。このSOの回答によると、「BasedOn」を使用して特定のプロパティのみをオーバーライドできますが、どのように/どこで使用するかわかりません。これは私の現在のテンプレートです:
<ControlTemplate x:Key="MyComboBoxTextBox" TargetType="ComboBox" <!--Here?--> >
<TextBox x:Name="PART_EditableTextBox" <!--Maybe Here?-->>
<TextBox.Style>
<Style TargetType="TextBox">
<Style.Triggers>
<Trigger Property="Text" Value="MAL">
<Setter Property="Foreground" Value="DarkOrange"></Setter>
</Trigger>
</Style.Triggers>
</Style>
</TextBox.Style>
</TextBox>
</ControlTemplate>
それは機能します、私はまだ有効な値を入力することができます、そして「MAL」はテキストをオレンジ色にしますが、ドロップダウンはもうありません。MSDNで、次のことがわかりました。
<TextBox x:Name="PART_EditableTextBox"
Style="{x:Null}"
Template="{StaticResource ComboBoxTextBox}"
HorizontalAlignment="Left"
VerticalAlignment="Bottom"
Margin="3,3,23,3"
Focusable="True"
Background="Transparent"
Visibility="Hidden"
IsReadOnly="{TemplateBinding IsReadOnly}" />
この「ComboBoxTextBox」に基づいてテンプレートを作成する必要があると思いますが、参照方法がわかりません。テンプレート全体を本当にコピーする必要がありますか、それとも特定のプロパティをオーバーライドする方法がありますか?
編集:同じMSDNページでcomboboxTextBoxは次のように定義されています
<ControlTemplate x:Key="ComboBoxTextBox"
TargetType="{x:Type TextBox}">
<Border x:Name="PART_ContentHost"
Focusable="False"
Background="{TemplateBinding Background}" />
</ControlTemplate>
このテンプレートをオーバーライドすると、ドロップダウンリストがどのように削除されるのかわかりません。