2013-12-07 25 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