WPF listview item mouse enter/over popup
This is because the routing strategy of the Loaded event is Direct, which means that the routed event does not route though an element tree. This is why we are unable to catch the Loaded event from the ListViewItems. You can refer to the doucment of Loaded event to get more information about this. The following example shows how to do this.
Code Block
namespace ForumProjects
{
public partial class MainWindow : Window
{
public MainWindow()
{
this.Persons = new List<Person>()
{
new Person(){ID=1,Name="AAA",Comment="Comment AAA"},
new Person(){ID=2,Name="BBB",Comment="Comment BBB"},
new Person(){ID=3,Name="CCC",Comment="Comment CCC"},
new Person(){ID=4,Name="DDD",Comment="Comment DDD"},
};
InitializeComponent();
}
public List<Person> Persons { get; private set; }
}
public class Person
{
public int ID { get; set; }
public string Name { get; set; }
public string Comment { get; set; }
}
public class PersonListView : ListView
{
protected override DependencyObject GetContainerForItemOverride()
{
return new PersonListViewItem();
}
protected override bool IsItemItsOwnContainerOverride(object item)
{
return item is PersonListViewItem;
}
}
public class PersonListViewItem : ListViewItem
{
public static readonly DependencyProperty PopupTextProperty =
DependencyProperty.Register("PopupText", typeof(string), typeof(PersonListViewItem), new FrameworkPropertyMetadata(PopupTextChanged));
public static readonly DependencyProperty IsPopupOpenProperty =
DependencyProperty.Register("IsPopupOpen", typeof(bool), typeof(PersonListViewItem), new FrameworkPropertyMetadata(IsPopupOpenChanged));
private Popup popup;
private TextBlock textBlock;
public PersonListViewItem()
{
this.textBlock = new TextBlock();
Grid grid = new Grid() { Background = Brushes.White };
grid.Children.Add(this.textBlock);
this.popup = new Popup() { Child = grid, PlacementTarget = this, Placement = PlacementMode.Right };
}
public string PopupText
{
get { return (string)GetValue(PopupTextProperty); }
set { SetValue(PopupTextProperty, value); }
}
public bool IsPopupOpen
{
get { return (bool)GetValue(IsPopupOpenProperty); }
set { SetValue(IsPopupOpenProperty, value); }
}
private static void IsPopupOpenChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
PersonListViewItem item = d as PersonListViewItem;
if (item != null)
{
item.popup.IsOpen = (bool)e.NewValue;
}
}
private static void PopupTextChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
PersonListViewItem item = d as PersonListViewItem;
if (item != null)
{
item.textBlock.Text = (string)e.NewValue;
}
}
}
}
<Window x:Class="ForumProjects.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:ForumProjects"
x:Name="Window" Title="MainWindow" Height="700" Width="800">
<StackPanel>
<local:PersonListView ItemsSource="{Binding ElementName=Window, Path=Persons}">
<local:PersonListView.View>
<GridView>
<GridViewColumn Header="ID" DisplayMemberBinding="{Binding ID}"/>
<GridViewColumn Header="Name" DisplayMemberBinding="{Binding Name}"/>
</GridView>
</local:PersonListView.View>
<local:PersonListView.ItemContainerStyle>
<Style TargetType="local:PersonListViewItem">
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="IsPopupOpen" Value="True"/>
</Trigger>
</Style.Triggers>
<Setter Property="PopupText" Value="{Binding Comment}"/>
</Style>
</local:PersonListView.ItemContainerStyle>
</local:PersonListView>
</StackPanel>
</Window>
Best Regards,
Wei Zhou
原文:WPF listview item mouse enter/over popup

WPF listview item mouse enter/over popup的更多相关文章
- C# Note16: wpf window 中添加enter和双击事件
一.添加回车(enter)事件 在C#编程时,有时希望通过按回车键,控件焦点就会自动从一个控件跳转到下一个控件进行操作. 以用户登录为例,当输入完用户名和密码后, 需要点击登录按钮,而登录按钮必须获 ...
- WPF ListView 选中问题
WPF ListView 选中问题 摘自:http://www.cnblogs.com/BBHor/archive/2013/04/28/VisualTreeHelper-PreviewMouseD ...
- WPF ListView控件设置奇偶行背景色交替变换以及ListViewItem鼠标悬停动画
原文:WPF ListView控件设置奇偶行背景色交替变换以及ListViewItem鼠标悬停动画 利用WPF的ListView控件实现类似于Winform中DataGrid行背景色交替变换的效果,同 ...
- Android listview.item.clear()与listview.clear()的区别
listview.clear()与listview.item.clear()的区别就是使用了listview.item.clear()后,listview控件中仍然保存着listviewitem项的结 ...
- ListView item 中TextView 如何获取长按事件
昨天晚上小伙伴突然来信, ListView item中嵌套的TextView 无法获取长按事件 从前从来没有仔细留意过, coding后发现...果然没什么动静 而且没有合适的API让我调用获取Tex ...
- [WPF]ListView点击列头排序功能实现
[转] [WPF]ListView点击列头排序功能实现 这是一个非常常见的功能,要求也很简单,在Column Header上显示一个小三角表示表示现在是在哪个Header上的正序还是倒序就可以了. ...
- Android 原生listview item伸展收缩效果 (续)
接上一个原生的listview item的伸展收缩效果. 上一个可能做的有些粗糙,效果也没有这个好,上代码. package com.example.listviewdemo; import java ...
- Android 原生listview item伸展收缩效果
Android原生listview做的一个item的伸缩效果.*永远不要让你老大有机会改需求 package com.example.yunkanglast; import java.io.Seria ...
- android 修改listview item view 的方法(转)
android 修改listview item view 的方法 具体的解答办法很简单: 代码如下 : 1.获取需要更新的view int visiblePosition = mListView. ...
随机推荐
- 最简单的基于FFmpeg的AVUtil样例 (AVLog, AVOption等)
本文的演示样例程序记录了FFmpeg的libavutil中几种工具函数的用法: AVLog:日志输出AVOption (AVClass):选项设置AVDictionary:键值对存储ParseUtil ...
- Linux基本命令(一)
目标 熟练使用 Linux常用的命令 ls clear cd pwd mkdir touch rm cp mv tree chmod find grep 重定向 软连接.硬链接 压缩 shutdown ...
- Android Notification如何显示表情?
遇到这种分析用什么实现的,肯定要祭出大杀器Android Device Monitor(AS在Tools->Android)打开之后,选中连接的设备,然后点击小手机图标,即可导出UI层次图.咱们 ...
- [Grid Layout] Use the repeat function to efficiently write grid-template values
We can use the repeat() function if we have repeating specifications for columns and rows. With the ...
- CF 559B(Equivalent Strings-构造法)
B. Equivalent Strings time limit per test 2 seconds memory limit per test 256 megabytes input standa ...
- ios开发不能不知的动态修复bug补丁第三方库JSPatch 使用学习:JSPatch导入、和使用、.js文件传输加解密
JSPatch ios开发不能不知的动态修复bug补丁第三方库JSPatch 使用学习:JSPatch导入.和使用..js文件传输加解密 ios开发面临审核周期长,修复bug延迟等让人无奈的问题,所以 ...
- SpringMVC ModelAndView跳转失效
今天隔壁的兄弟遇到一个奇怪的问题,他写好了一个表单用post提交到了addNew.do 里面,然后利用 return new ModelAndView("forward:success.js ...
- iOS常用加密方法(aes、md5、base64)
1.代码 iOS常用加密方法(aes.md5.base64) .AES加密 NSData+AES.h文件 // // NSData-AES.h // Smile // // Created by 周 ...
- 学习鸟哥的Linux私房菜笔记(6)——过滤器、输入输出及管道
一.过滤器 Linux中的应用工具分为三种: 交互工具 过滤器 编辑器 能够接受数据,过滤再输出的工具,称之为过滤器 对过滤器和进程,存在着输入源与输出对象 二.输入.输出.重定向 输入:过滤器的数据 ...
- Popup 解决位置不随窗口/元素FrameworkElement 移动更新的问题
原文:Popup 解决位置不随窗口/元素FrameworkElement 移动更新的问题 Popup弹出后,因业务需求设置了StaysOpen=true后,移动窗口位置或者改变窗口大小,Popup的位 ...