Determining which CustomPopupPlacement was used for WPF Popup(确定用于 WPF 弹出窗口的 CustomPopupPlacement)
问题描述
我试图找出在实际呈现弹出窗口时使用了传入的 CustomPopupPlacement
位置数组中的哪一个.有什么事件可以检测到这一点吗?
I'm trying to figure out which of the passed in array of CustomPopupPlacement
positions have been used when the popup actually renders. Is there any event to detect this?
这个 2009 年的 msdn 线程似乎正是我的问题,但似乎没有答案.
This msdn thread from 2009 seems to be exactly my issue however there does not seem to be an answer for it.
http://social.msdn.microsoft.com/Forums/da/wpf/thread/4c6d216a-0011-4202-aa7e-2fccef3cc355
标记的答案似乎无效,我的情况与线程中的 OP 完全相同.
The marked answer seems invalid and my situation is exactly as the OP in the thread.
我将弹出带有 4 条路径的弹出窗口,并使用 DP 来切换三个路径的可见性,以选择要渲染的正确箭头路径.
I'm going to have my popup with 4 paths and use a DP to toggle visibility on three paths to choose the correct arrow path being rendered.
因此,鉴于我们通过 CustomPopupPlacementCallback
delegate 提供了 4 个放置选项,有没有办法检测系统在处理屏幕边缘情况和排序后最终选择的 4 个位置中的哪一个.
So given we provide 4 placement options via the CustomPopupPlacementCallback
delegate, Is there a way to detect which of the 4 positions the system finally chose after dealing with screen edge cases and the sorts.
推荐答案
我有一个小技巧.将自定义点保存为派生的 TooTip 类中的字段并覆盖 OnOpened 方法.
I have a little hacky solution. Save the custom points as fields in the derived TooTip class and override the OnOpened method.
protected override void OnOpened(RoutedEventArgs e)
{
base.OnOpened(e);
var p = this.TranslatePoint(new Point(0, 0), this.PlacementTarget);
var diff1 = this.first - p;
var diff2 = this.second - p;
if (Math.Abs(Math.Min(diff1.Length, diff2.Length) - diff1.Length) < 0.01)
{
// First Point
}
else
{
// Second Point
}
}
欢迎提供更好的解决方案
Better solutions are welcome
这篇关于确定用于 WPF 弹出窗口的 CustomPopupPlacement的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:确定用于 WPF 弹出窗口的 CustomPopupPlacement


- 在哪里可以找到使用中的C#/XML文档注释的好例子? 2022-01-01
- C# 中多线程网络服务器的模式 2022-01-01
- 良好实践:如何重用 .csproj 和 .sln 文件来为 CI 创建 2022-01-01
- 如何用自己压缩一个 IEnumerable 2022-01-01
- MoreLinq maxBy vs LINQ max + where 2022-01-01
- C#MongoDB使用Builders查找派生对象 2022-09-04
- Web Api 中的 Swagger .netcore 3.1,使用 swagger UI 设置日期时间格式 2022-01-01
- 输入按键事件处理程序 2022-01-01
- 带有服务/守护程序应用程序的 Microsoft Graph CSharp SDK 和 OneDrive for Business - 配额方面返回 null 2022-01-01
- WebMatrix WebSecurity PasswordSalt 2022-01-01