2010-12-14 22 views
1

Ich habe ein ListView Steuerelement mit TextBox und Button innerhalb der ListViewItem, mein Problem ist, dass wenn Sie in ein Textfeld die Zeile nicht auswählen. Wenn Sie eine Zeile auswählen möchten, müssen Sie irgendwo in die Zeile klicken, in der kein Steuerelement vorhanden ist.WPF ListView ausgewählter Artikel Problem

Wie kann ich die Zeile automatisch auswählen, wenn ich auf ein untergeordnetes Steuerelement klicke oder eintrage?

Ich habe versucht, diese auf der Schaltfläche Click-Ereignis, aber ohne Glück:

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

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

Es hält immer die erste ausgewählte Zeile.

Vielen Dank im Voraus.

+0

möglich Duplikat [ein Textbox Element in einem Listenfeld auswählen nicht die ausgewählten ändern Element der Listbox] (http://stackoverflow.com/questions/653524/selecting-a -textbox-item-in-einer-listbox-ändert nicht-die-ausgewählte-liste-von-der-li) –

Antwort

0

try angebrachte Eigenschaften mit Hilfe

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; 
    } 

und seine here Verwendung

<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>