use*_*265 1 gridview microsoft-metro windows-8
我正在使用GridView构建一个Windows 8 Metro应用程序(C#,XAML),我想在用户点击的GridViewItem附近显示一个弹出窗口.我计划通过click事件参数获取GridViewItem UIElement,并使用其坐标来确定弹出窗口的位置.
但是,我还没有找到一种方法来获取对被点击的实际GridViewItem UIElement的引用!我在下面尝试过的事件似乎只通过它们的EventArgs暴露了DataContext,而不是实际的UIElement:
object sender // is the GridView
ItemClickEventArgs.ClickedItem // is the DataContext of the GridViewItem
ItemClickEventArgs.OriginalSource // is the GridView
SelectionChangedEventArgs.OriginalSource // is null
SelectionChangedEventArgs.AddedItems.First() // is the DataContext of the GridViewItem
Run Code Online (Sandbox Code Playgroud)
如果重要,我的GridView.ItemSource是一个CollectionViewSource,其Source绑定到一个viewmodels集合.
是否有可能通过我忽略的一些事件获得点击的GridViewItem?如果没有,我应该用什么角度来解决它呢?我至少可以通过PointerPressed事件得到相对于GridView的点击坐标,看看我能做些什么来找到那个项目,但我真的希望我不必走那条路.
我还在应用程序中实现了这种行为 - 使用Callisto库中的Flyout弹出窗口以及单击的GridViewItem.
简单地调用ContainerFromItem来获取相关的GridViewItem控件要容易得多:
private void itemGridView_ItemClick(object sender, ItemClickEventArgs e)
{
var clickedItem = itemGridView.ItemContainerGenerator.ContainerFromItem(e.ClickedItem);
// Open the flyout now
Flyout flyOut = new Flyout();
if (clickedItem is GridViewItem)
flyOut.PlacementTarget = clickedItem as UIElement;
else
flyOut.PlacementTarget = sender as UIElement;
flyOut.Placement = PlacementMode.Left;
SolidColorBrush br = new SolidColorBrush(Colors.Blue);
flyOut.Background = br;
TextBlock tb = new TextBlock();
tb.Text = "I'm in your flyout messing with your text";
flyOut.Content = tb;
flyOut.IsOpen = true;
}
Run Code Online (Sandbox Code Playgroud)
感谢这个帖子让我指向正确的方向.
归档时间: |
|
查看次数: |
7200 次 |
最近记录: |