У меня есть ListBox, связанный с коллекцией элементов типа Definition.Мое требование заключается в том, чтобы каждый раз, когда мышь находилась над областью шаблонного ListBoxItem, второго ListBox, открытого рядом с ListBoxItem, выявлялись подэлементы, имеющие тип Word.
(в основном я реализую нечто подобноев TreeView с использованием двух списков. Это для более ранних версий, поэтому использование элемента управления TreeView не вариант.)
Это структура данных ...
public class Word
{
public string Name { get; set; }
}
public class Definition
{
public string Name { get; set }
public ObservableCollection<Word> Words;
}
public class Dictionary
{
public string Name { get; set }
public ObservableCollection<Definition> Definitions;
}
А вотПредставление XAML ...
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<Button Grid.Row="0"
Height="0">
<Button.Flyout>
<Flyout x:Name="DefinitionFlyout"/>
<ListBox x:Name="WordsListBox" HorizontalAlignment="Stretch">
<ListBox.ItemTemplate>
<DataTemp late x:DataType="local:Word">
<TextBox TextWrapping="NoWrap"
Height="Auto"
BorderThickness="0"
HorizontalAlignment="Stretch"
Text="{x:Bind Name}"
TextAlignment="Left"/>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</Flyout>
</Button.Flyout>
</Button>
<ListBox x:Name="DefinitionsListBox"
Grid.Row="1"
SelectionMode="Single"
HorizontalAlignment="Stretch">
<ListBox.ItemContainerStyle>
<Style TargetType="ListBoxItem">
<Setter Property="HorizontalContentAlignment" Value="Stretch"/>
<Setter Property="VerticalContentAlignment" Value="Stretch"/>
</Style>
</ListBox.ItemContainerStyle>
<ListBox.ItemTemplate>
<DataTemplate x:DataType="local:Definition">
<TextBox TextWrapping="NoWrap"
Height="Auto"
BorderThickness="0"
HorizontalAlignment="Stretch"
Text="{x:Bind Name, Mode=TwoWay}">
</TextBox>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</Grid>
Когда указатель мыши находится над элементом Definition в DefinitionsListBox, WordsListBox должен вылететь и отобразить слова этого определения.И когда указатель выходит из этого определения и наводит курсор на новое, я хочу, чтобы WordsListBox отразил это изменение.
К сожалению, я не могу найти события, которые помогут мне достичь этого.
Я подумал, что определение PointerEntered и PointerExited в TextBox of Definition поможет, но они этого не делают, потому что PointerExited запускается НЕМЕДЛЕННО после PointerEntered, как почти одновременно, а не когда мышь выходит из области TextBox.И SelectionChanged из ListBox не срабатывает.
Первое событие должно срабатывать, когда начинается подсветка ListBoxItem, и второе, когда заканчивается выделение.
Что вы порекомендуете для этого, пожалуйста?