1

コンボボックスのテキストボックス部分に条件付き書式(フォントの色のみ)を追加したいと思います。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>

このテンプレートをオーバーライドすると、ドロップダウンリストがどのように削除されるのかわかりません。

4

1 に答える 1

0

さて、あなたのコードをすべて読んで、仕事で本当にlooooooongの日を過ごした後、私は本当に混乱したと思います、私はあなたの質問のポイントを完全に逃しました....それは

コンボボックスのテキストボックス部分に条件付き書式(フォントの色のみ)を追加したい

それがあなたがしたいすべてであるなら、それは単純なスタイルのトリガーだけで本当に簡単です。私はこのxamlでそれを達成することができます。

<ComboBox HorizontalAlignment="Center" VerticalAlignment="Center">
    <ComboBox.Resources>
        <Style TargetType="ComboBox">
            <Style.Triggers>
                <Trigger Property="Text" Value="MAL">
                    <Setter Property="Foreground" Value="DarkOrange" />
                </Trigger>
            </Style.Triggers>
        </Style>
    </ComboBox.Resources>
    <ComboBoxItem>MAL</ComboBoxItem>
    <ComboBoxItem>1</ComboBoxItem>
    <ComboBoxItem>2</ComboBoxItem>
    <ComboBoxItem>3</ComboBoxItem>
</ComboBox>

お役に立てれば!

于 2013-03-14T11:06:06.853 に答える