0

ComboBox コントロールにアタッチされたカスタム動作があります。

私が望む動作では、デフォルトで、インクリメンタル検索を実装する ComboBox の最初の項目を強調表示します。つまり、ポップアップで結果がレンダリングされた瞬間に、最初の項目が強調表示されますが、選択されません。

つまりSelectedIndex = 0、アイテムも選択するため、使用できません。ComboBox を空のままにしたいのですが、アイテムの視覚的な状態を強調表示した状態に設定します。

IsHighlightedPropertyinがあるComboBoxItemようですが、それは読み取り専用の dp として登録されているため、役に立ちません。

とにかく私はこれを行うことができますか?

4

2 に答える 2

1

コンバーターを使用する代わりに、ComboBox のAlternationIndexプロパティを使用して項目のインデックスを取得し、トリガーを使用して最初の項目だけに色を付けることもできます。代替インデックスを ComboBox 内のアイテム数よりも常に大きい値に設定して、インデックスが 0 のアイテムが 1 つだけになるようにします。アイテムを強調表示するスタイルは次のようになります。

    <Style x:Key="FirstColor" TargetType="{x:Type ListBoxItem}">
        <Style.Triggers>
            <Trigger Property="ComboBox.AlternationIndex" Value="0">
                <Setter Property="Background" Value="{DynamicResource {x:Static SystemColors.HighlightBrushKey}}"/>
            </Trigger>
        </Style.Triggers>            
    </Style>

ComboBox は次のようになります。

<ComboBox ItemsSource="{Binding Items}" SelectedIndex="-1" 
          AlternationCount="500" 
          ItemContainerStyle="{StaticResource FirstColor}"/>

HighlightBrushKey、カスタム カラーではなく、既存のハイライト スタイルを使用します。

于 2012-08-08T13:47:09.613 に答える
0

アイテムのリストは、何らかの形ItemsControl(つまり、、、ComboBoxなど)ListBoxである必要がありますよね?ListViewTreeView

したがって、プロパティが含まれている必要がありItemTemplateます...

そのため、2つのプロパティに必要なaを追加 ItemTemplate します...DataTriggerMultiBinding

  1. リスト項目の現在のデータ コンテキスト ...{Binding}
  2. リストの ItemsSource ...{Binding ItemsSource, RelativeSource={RelativeSource AncetsrType={x:Type ItemsControl}}}

MultiBinding.Convertertrue を返します

  values[0] == ((IEnumerable)values[1]).Cast<object>().First()

次に、このフラグに基づいてDataTrigger、リストの最初の項目に必要なスタイルを適用できます!

お役に立てれば。

于 2012-08-08T13:21:21.063 に答える