【发布时间】:2016-06-29 21:17:44
【问题描述】:
我有一个模拟的动态网格,使用列表列表。父列表视图是一个分组列表视图。它的项目是水平堆叠的列表。
在最里面的单元格上,我需要显示一个弹出窗口或弹出窗口。我尝试在子列表项目的 SelectionChanged 和 ItemClicked 事件上使用 Flyouts - Flyouts 根本不显示。要显示弹出窗口,我需要坐标 - 无法使用 SelectionChanged 和 ItemClick 事件来获取它们。
如果我尝试获取单击的单元格的坐标,则只有垂直坐标值是准确值,对于水平偏移量,我得到一个静态值,可能是父列表的水平偏移量。
当我单击子列表中的单元格时,我可以做些什么来显示弹出/弹出窗口?
这是 Xaml:
<ScrollViewer x:Name="ResultsPanelScrollViewer"
Grid.Column="1"
HorizontalScrollBarVisibility="Auto"
HorizontalScrollMode="Enabled"
VerticalScrollBarVisibility="Disabled"
VerticalScrollMode="Disabled">
<utils:AlternatingRowListView x:Name="ResultsPanel"
Margin="0"
EvenRowBackground="{StaticResource LabResultsListItemBackground}"
ItemContainerStyle="{StaticResource ResultsPanelListViewItemStyle}"
ItemsSource="{Binding LabResultsDetailsCollection.View,Mode=OneWay}"
OddRowBackground="{StaticResource ListViewItemBackground}"
RelativePanel.RightOf="CategoriesPanel"
ScrollViewer.VerticalScrollBarVisibility="Visible"
ScrollViewer.VerticalScrollMode="Enabled" SelectionMode="None">
<ListView.GroupStyle>
<GroupStyle HeaderContainerStyle="{StaticResource
LabResultsListViewGroupStyle}"
HeaderTemplate="{StaticResource ValuesListHeaderTemplate}" />
</ListView.GroupStyle>
<ListView.ItemTemplate>
<DataTemplate>
<ListView Margin="0"
ItemTemplate="{StaticResource ValuesItemTemplate}"
ItemsSource="{Binding LabResults}"
Padding="0"
IsItemClickEnabled="True"
ItemClick="ListView_ItemClick">
<ListView.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Margin="0"
Orientation="Horizontal"
Padding="0" />
</ItemsPanelTemplate>
</ListView.ItemsPanel>
<FlyoutBase.AttachedFlyout>
<Flyout>
<TextBlock Text="sdfasd"/>
</Flyout>
</FlyoutBase.AttachedFlyout>
</ListView>
</DataTemplate>
</ListView.ItemTemplate>
</utils:AlternatingRowListView>
</ScrollViewer>
这是我的代码隐藏:
private void ListView_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
var x = sender as ListView;
var gt = x.TransformToVisual(this);
var screenPoint = gt.TransformPoint(new Point(0, 0));
FlyoutBase.ShowAttachedFlyout(sender as FrameworkElement);
}
private void ListView_ItemClick(object sender, ItemClickEventArgs e)
{
var x = sender;
var gt = ((ListView)e.OriginalSource).TransformToVisual(this);
var screenPoint = gt.TransformPoint(new Point(0, 0));
}
【问题讨论】: