2011-01-06 3 views
3

C#WPF - 私は内部的にコンボボックスを使用するカスタムコントロールに取り組んでいるコンボボックス

私の問題は、コンボボックスにフォーカスして、ドロップダウンオープンを持っているとき、全体の制御を集中するように見えるです。私はドロップされたドロップの最初のアイテムを自動的にハイライトしたいと思いますが、今はダウンキーを押してそれを行う必要があります。

プログラムでコンボボックスの最初の項目(trueに読み取り専用IsHighlightedプロパティを設定する)をハイライト表示する方法はありますか?私は、ComboBox内のIsHighlightの概念がFocusとは異なると考えています。また、ItemsSource経由でバインドしているので、ComboBoxItemsへの参照はありません。

+0

だから、最初の項目ではなく、選択した項目の強調表示したいですか? – Stefan

+0

この時点では選択されたアイテムはありません。 ComboBoxがフォーカスされていて、ドロップダウンが開いているときは、最初のComboBoxItemがハイライト表示されているので、ドロップダウン内の上下の矢印キーを使用できます。今すぐ最初のアイテムが強調表示される前に、ダウンしなければなりません。 – jonathanpeppers

+0

ああ、申し訳ありませんが、コンボボックスには選択したアイテムが必要ないことを覚えていません。私はいつも:-)それはしばらく見ていますが、解決策を見つけることはできません。私はキーストロークを送信しようとしましたが、それでもうまくいきませんでした。 – Stefan

答えて

3

はここで、それを行うための方法だか分かりませんそこに選択された要素がすでにある?あなたはまだリストの最初の要素を選択しますかとき?コンボボックスで選択範囲がない場合にのみ、以下のコードは、最初の要素が強調表示されます。それは常に最初の要素を選択するようにするには、DropDownOpenedイベントも処理する必要があります)。

public MainWindow() 
{ 
    InitializeComponent(); 
    combobox.ItemContainerGenerator.StatusChanged += new EventHandler(ItemContainerGenerator_StatusChanged); 
} 

void ItemContainerGenerator_StatusChanged(object sender, EventArgs e) 
{ 
    if (combobox.ItemContainerGenerator.Status == System.Windows.Controls.Primitives.GeneratorStatus.ContainersGenerated) 
    { 
     (combobox.ItemContainerGenerator.ContainerFromIndex(0) as ComboBoxItem).Focus(); 
    } 
} 

(私は正しく理解しています。これはあなたがしたいことです)。

+0

これは動作します、私はメンバ変数にComboBoxItemを格納し、適切なときだけフォーカスを呼び出します。ここで問題となるのは、押し続けてもScrollViewerが自動的にスクロールしないということです。このコードを取り除くと、ScrollViewerは意図したとおりに動作します。 – jonathanpeppers

+0

正確にダウンキーを押したときは?ドロップダウンリストが開いているときは?私はちょうど簡単なテストをして、それは問題なくスクロールを押して、私のために働くようです。たぶんあなたのケースは100文字列の私の単純なコンボボックスよりも複雑ですか? –

+0

私のケースはちょっと複雑ですね。私は最終的にあなたの解決策を見つけ出すと思いますが、答えとしてあなたをマークしています。 – jonathanpeppers

0

これは、あなたが探しているものではないかもしれませんが、mycombo.SelectedIndex = 0と設定した場合、mycombo.IsDropDownOpen = Trueはそれを開いて最初の項目を選択する必要があります。これは強調表示されますが、コンボボックスの値にもなります。しかし、あなたは何が起こるか、例えば(あまりにも多くの詳細を提供しなかった - 私はこれはしかし所望の効果ではない場合...それはすべてのケースをカバーしていないかもしれませんが

+0

ええ、私はComboBoxを選択するのではなく、最初のComboBoxItemにある "focus"/"IsHighlight"だけを選択します。 – jonathanpeppers

関連する問題