2010-12-14 4 views
1

У меня есть элемент управления ListView с TextBox и Button внутри ListViewItem, моя проблема в том, что при вводе в текстовое поле строка не выбирается. Если вы хотите выбрать строку, вам нужно щелкнуть где-нибудь в строке, где нет элемента управления.WPF ListView проблема выбранного элемента

Как я могу сделать строку автоматически выбрав, когда я нажимаю или вхожу в дочерний элемент управления строки?

Я попробовал это на событии нажатия кнопки, но без везения:

 DependencyObject dep = (DependencyObject)sender; 
     while ((dep != null) && !(dep is ListViewItem)) 
     { 
      dep = VisualTreeHelper.GetParent(dep); 
     } 

     if (dep != null) 
     { 
      lvRoutes.SelectedItem = (ListViewItem)dep; 
     } 

Это всегда держать первую строку выбранной.

Благодарим заранее.

+0

возможно дубликат [Выбор Textbox позицию в Listbox не меняет выбранный элемент списка] (http://stackoverflow.com/questions/653524/selecting-a -textbox-элемент-в-ListBox-делает-не-изменение-заместитель выбран-детал-оф-Li) –

ответ

0

попробовать использовать вложенные свойства

public static class ItemSelector 
{ 
    public static DependencyProperty MakeSelectionProperty = 
     DependencyProperty.RegisterAttached("MakeSelection", 
     typeof(bool?), 
     typeof(ItemSelector), 
     new PropertyMetadata(null, OnMakeSelectionPropertyChanged)); 

    public static DependencyProperty ItemsControlProperty = 
     DependencyProperty.RegisterAttached("ItemsControl", 
     typeof(ItemsControl), 
     typeof(ItemSelector)); 

    public static void SetMakeSelection(
     DependencyObject d, bool value) 
    { 
     d.SetValue(MakeSelectionProperty, value); 
    } 

    public static void SetItemsControl(
     DependencyObject d, ItemsControl value) 
    { 
     d.SetValue(ItemsControlProperty, value); 
    } 

    private static void OnMakeSelectionPropertyChanged(
     DependencyObject d, DependencyPropertyChangedEventArgs e) 
    { 
     var itemsControl = d.GetValue(ItemsControlProperty) 
      as ItemsControl; 
     if (itemsControl == null) 
      return; 
     ((ListBoxItem) itemsControl.ContainerFromElement(d)) 
      .IsSelected = true; 
    } 

и Heres его использования

<ListView ItemsSource="{Binding}" SelectionMode="Single"> 
<ListView.ItemTemplate> 
    <DataTemplate> 
    <TextBox Text="{Binding SomeText}" 
      w:ItemSelector.MakeSelection="{Binding RelativeSource= 
       {RelativeSource Self}, Path=IsFocused}" 
      w:ItemSelector.ItemsControl="{Binding RelativeSource= 
       {RelativeSource FindAncestor, AncestorType= 
        {x:Type ListView}}}" Margin="10" /> 
    </DataTemplate> 
</ListView.ItemTemplate> 

Смежные вопросы