3
我有一個使用DataTemplate呈現對象的ListBox。 DataTemplate包含一個TextBox。當用戶在列表框中選擇一個項目時,我想將焦點設置到所選項目的文本框中。如何在選擇ListBoxItem時將焦點設置爲ItemTemplate中的控件?
我已經能夠通過處理ListBox.SelectionChanged來部分實現這個功能,但它僅在用戶單擊ListBox來選擇項目時才起作用 - 如果用戶在ListBox中選項卡並使用箭頭即使調用TextBox.Focus()爲,也可以選擇項目。
如何在用戶使用鍵盤選擇項目時將焦點設置到文本框?
下面是ListBox中的標記:
<ListBox Name="lb1" SelectionChanged="ListBox_SelectionChanged" ItemsSource="{Binding Items}" >
<ListBox.ItemTemplate>
<DataTemplate >
<TextBox></TextBox>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
下面是處理代碼:
private void ListBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
ListBoxItem lbi = (ListBoxItem)this.lb1.ItemContainerGenerator.ContainerFromItem(this.lb1.SelectedItem);
Visual v = GetDescendantByType<TextBox>(lbi);
TextBox tb = (TextBox)v;
tb.Focus();
}
不錯的一個:)希望你不介意我是否在解釋* why * it的答案中加了一個句子。我不得不說這感覺有點骯髒,但它完成了工作。 – 2011-01-17 00:26:11