在WinUI3中,您似乎无法修改工具提示的持续时间(类似于WPF允许在ToolTipService.ShowDuration
中更改持续时间的方式)。
因此,我试图使用弹出控件复制该行为,这样只要鼠标悬停在元素上(利用元素的OnPointerEntered
/ OnPointerExited
事件来修改弹出窗口的IsOpen
属性),弹出窗口就将保持可见。
这将正确显示弹出窗口,但在我的示例中,弹出窗口存在于Grid
中,而该弹出窗口位于ListView
的ListView.ItemTemplate
中。ala:
<ListView>
<DataTemplate>
<Grid>
<TextBlock/>
<Popup/>
</Grid>
</DataTemplate>
</ListView>
因此,弹出窗口仅覆盖<Grid>
,但仍会在DataTemplate
区域内被剪裁。
我希望弹出覆盖<ListView>
本身--是否有一种方法可以指定弹出将覆盖哪些内容,从而覆盖<ListView>
?
或者更好--让它覆盖窗口的所有元素(复制工具提示的位置?)
发布于 2022-04-25 04:20:14
是否有一种方法可以更改WinUI3中弹出窗口的父内容?
当然,您可以在当前页面中将弹出设置在与ListView
相同的级别。并侦听ListView、item、PointerEntered
和PointerExited
事件,然后将当前项数据文本传递给弹出控件。
Xaml
<ListView
Margin="0,10,0,45"
ItemsSource="{x:Bind Items}"
Visibility="Visible">
<ListView.ItemTemplate>
<DataTemplate>
<StackPanel
Orientation="Vertical"
PointerEntered="StackPanel_PointerEntered"
PointerExited="StackPanel_PointerExited">
<TextBlock x:Name="Id" Text="{Binding ID}" />
<TextBox
x:Name="FirstName"
GettingFocus="FirstName_GettingFocus"
Text="{Binding FirstName}" />
<TextBox x:Name="LastName" Text="{Binding LastName}" />
</StackPanel>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
<Popup
x:Name="PopupTip"
HorizontalAlignment="Center"
VerticalAlignment="Center">
<Popup.ChildTransitions>
<TransitionCollection>
<PaneThemeTransition Edge="Bottom" />
</TransitionCollection>
</Popup.ChildTransitions>
<StackPanel
Width="150"
Height="80"
Background="LightGray"
CornerRadius="4">
<TextBlock
x:Name="InfoLabel"
HorizontalAlignment="Center"
VerticalAlignment="Center"
Text="{Binding ID}" />
</StackPanel>
</Popup>
代码在中的应用
private void StackPanel_PointerEntered(object sender, PointerRoutedEventArgs e)
{
var ItemDataContext = (sender as FrameworkElement).DataContext;
PopupTip.DataContext = ItemDataContext;
PopupTip.IsOpen = true;
}
private void StackPanel_PointerExited(object sender, PointerRoutedEventArgs e)
{
PopupTip.DataContext = null;
PopupTip.IsOpen = false;
}
https://stackoverflow.com/questions/71985669
复制相似问题