2013-12-07 16 views
0

我想在MouseEnter事件中检索ListViewa中的行单元格的值。 ListView项目是使用Binding生成的。ListView:在MouseEnter上检索行值

如何在不检查SelectedItem的情况下做到这一点?

更新

XAML

<StackPanel> 
    <ListView x:Name="listView" MouseEnter="listView_MouseEnter"> 
     <ListView.View> 
      <GridView> 
       <GridViewColumn Header="Items"/> 
      </GridView> 
     </ListView.View> 
    </ListView> 
    <StatusBar VerticalAlignment="Center"> 
     <StatusBarItem>The value is:</StatusBarItem> 
     <StatusBarItem x:Name="retrievedText" /> 
    </StatusBar> 
</StackPanel> 

CS

public MainWindow() 
    { 
     InitializeComponent(); 

     int[] itemSource = { 1, 12, 3, 44, 12, 45, 6, 8, 9 }; 

     listView.ItemsSource = itemSource; 
    } 


    private void listView_MouseEnter(object sender, MouseEventArgs e) 
    { 
     string hoveredItem = null; //This will be the retrieved value 

     retrievedText.Content = hoveredItem; 
    } 

回答

1

我们可以覆盖ItemContainerStyle给项目一个机会来处理事件:

XAML:

<ListBox> 
    <ListBox.ItemContainerStyle> 
     <Style TargetType="{x:Type ListBoxItem}" BasedOn="{StaticResource {x:Type ListBoxItem} }"> 
      <EventSetter Event="MouseEnter" Handler="ListBoxItem_MouseEnter" /> 
     </Style> 
    </ListBox.ItemContainerStyle> 
</ListBox> 

CS:

private void ListBoxItem_MouseEnter(object s, MouseEventArgs e) 
{ 
    var item = e.OriginalSource as ListBoxItem; 

    // depends on what we have put in the content. e.g. string. 
    var content = item.Content as string; 
} 

你的情况:

XAML:

<StackPanel> 
    <ListView x:Name="listView"> 
     <ListView.ItemContainerStyle> 
      <Style TargetType="{x:Type ListBoxItem}" BasedOn="{StaticResource {x:Type ListBoxItem}}"> 
       <EventSetter Event="MouseEnter" Handler="ListBoxItem_MouseEnter" /> 
      </Style> 
     </ListView.ItemContainerStyle> 
     <ListView.View> 
      <GridView> 
       <GridViewColumn Header="Items"/> 
      </GridView> 
     </ListView.View> 
    </ListView> 
    <StatusBar VerticalAlignment="Center"> 
     <StatusBarItem>The value is:</StatusBarItem> 
     <StatusBarItem x:Name="retrievedText" /> 
    </StatusBar> 
</StackPanel> 

CS:

private void ListBoxItem_MouseEnter(object s, MouseEventArgs e) 
{ 
    var item = e.OriginalSource as ListBoxItem; 
    retrievedText.Content = item.Content; 
} 
+0

变化'支持算法FMP =“{StaticResource的类型{x:输入ListBoxItem}'我如果您拥有listboxitem的自定义样式。你可以很容易地将上面的ListBox代码应用到ListView,只需将ListBox更改为ListView – Eben

+0

感谢您的答案。我试图添加你的代码,但它不起作用。我用代码更新了我的答案。我的目标是检索鼠标悬停的值并将其添加到状态栏项目。 – MCSharp

+0

添加了您的案例的代码... – Eben