Reputation: 1068
I would like to retrieve the value of a row cell in a ListView
a on a MouseEnter
event. The ListView
items are generated with Binding
.
How can this be done without checking the SelectedItem
?
Update
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;
}
Upvotes: 0
Views: 1455
Reputation: 552
We can override the ItemContainerStyle to give the items a chance to handle the event:
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;
}
In your case:
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;
}
Upvotes: 1