C# UWP:Highlight ListBoxItem-与突出显示一致的事件
我有一个绑定到类型定义项集合的列表框。我的要求是,每次鼠标悬停在模板化ListBoxItem区域上时,ListBoxItem旁边会打开第二个ListBox,显示Word类型的子项 (我基本上是使用两个列表框实现类似于TreeView的东西。这是针对早期版本的,所以使用TreeView控件不是一个选项。) 这是数据结构C# UWP:Highlight ListBoxItem-与突出显示一致的事件,c#,xaml,mvvm,uwp,C#,Xaml,Mvvm,Uwp,我有一个绑定到类型定义项集合的列表框。我的要求是,每次鼠标悬停在模板化ListBoxItem区域上时,ListBoxItem旁边会打开第二个ListBox,显示Word类型的子项 (我基本上是使用两个列表框实现类似于TreeView的东西。这是针对早期版本的,所以使用TreeView控件不是一个选项。) 这是数据结构 public class Word { public string Name { get; set; } } public class D
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;
}
公共类单词
{
公共字符串名称{get;set;}
}
公共类定义
{
公共字符串名称{get;set}
公开收集词语;
}
公共类词典
{
公共字符串名称{get;set}
公共可观测集合定义;
}
这里是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>
当鼠标指针悬停在DefinitionsListBox中的定义项上时,WordsListBox应该会飞出并显示该定义的单词。当指针退出该定义并将鼠标悬停在新定义上时,我希望WordsListBox反映该更改
不幸的是,我找不到有助于我实现这一目标的活动
我认为在Definition的TextBox中定义PointerEntered和pointerexitted会起作用,但事实并非如此,因为pointerexitted在PointerEntered之后立即启动,就像在几乎同时启动一样,而不是在鼠标离开TextBox区域时启动。并且ListBox的SelectionChanged不会启动
第一个事件应在ListBoxItem高亮显示开始时激发,第二个事件应在高亮显示结束时激发
请问你推荐什么
我认为在定义的文本框中定义PointerEntered和PointerExited会起到作用,但事实并非如此,因为PointerExited会在PointerEntered之后立即触发,就像在几乎同时发生的情况下一样
问题在于当按钮上显示弹出按钮时,窗口上有遮罩层覆盖。这将阻止定义的TextBox
的基本输入事件。它看起来几乎同时在PointerEntered
之后立即触发PointerEntered
为了解决这个问题,您可以为弹出按钮设置OverlayInputPassThroughElement
属性,当弹出按钮打开时,ListBox
区域可以响应PointerEntered
PointerExited
事件。有关更多信息,请参阅以下代码
<Flyout x:Name="DefinitionFlyout" OverlayInputPassThroughElement="{x:Bind DefinitionsListBox}">
它工作得非常好!非常感谢你让我意识到这一点!!这是我的荣幸。