gpt4 book ai didi

c# - Wpf 置于最前面

转载 作者:行者123 更新时间:2023-11-30 15:10:15 26 4
gpt4 key购买 nike

我有一个 ItemsControl,它使用 Canvas 和 ItemsPanel。 itemsTemplate 托管自定义控件。单击控件时,我希望它“移到前面”。我知道我可以像这样使用我的控件中的 ZIndex 来做到这一点:

 private void MyControl_PreviewMouseDown(object sender, MouseButtonEventArgs e)
{
if(((FrameworkElement)sender).TemplatedParent==null) return;
ContentPresenter presenter = (ContentPresenter)((FrameworkElement) sender).TemplatedParent;

int currentValue = Panel.GetZIndex(presenter);
Console.WriteLine(currentValue);
Panel.SetZIndex(presenter, 99);
}

这可以正常工作并设置 ZIndex。但是,当我在 ItemsControl 中单击不同的控件时,它将获得完全相同的 ZIndex,因此它不会“移到”另一个控件的前面。

基本上我只想要与 Windows 展示的行为相同。

我已经尝试在 PreviewMouseUp 事件中将 ZIndex 设置回 0,这确保了单击的控件始终位于顶部,但是由于所有其他控件的 ZIndex 都为 0,因此将采用默认顺序列表中的位置。

一个例子:

假设我有 3 个 ZIndex 均为 0 的控件。(因此它们使用默认列表位置。)

如果我点击控件 3,然后是 2,然后是 1。我希望它在 ZOrder 的顶部有 3,然后是 2,然后是 1。但是因为我在 MouseUp 上将 ZIndex 设置为零,它会有默认顺序为 1、2、3。

有没有一种简单的方法来处理这个问题,还是我需要自己跟踪顺序并递增递减任意值(例如 99)?

最佳答案

我会按照这些思路做一些事情:

鼠标按下时,将所选控件上的 Z-index 设置为非常高的数字。将 static int Zindex 初始化为 0。鼠标向上时设置 Z-index 等于 Zindex++

private static int Zindex = 0;

private void MyControl_PreviewMouseDown(object sender, MouseButtonEventArgs e)
{
if(((FrameworkElement)sender).TemplatedParent==null) return;
ContentPresenter presenter = (ContentPresenter)((FrameworkElement) sender).TemplatedParent;

int currentValue = Panel.GetZIndex(presenter);
Console.WriteLine(currentValue);
Panel.SetZIndex(presenter, Int32.MaxValue);
}

private void MyControl_PreviewMouseUp(object sender, MouseButtonEventArgs e)
{
if(((FrameworkElement)sender).TemplatedParent==null) return;
ContentPresenter presenter = (ContentPresenter)((FrameworkElement) sender).TemplatedParent;

int currentValue = Panel.GetZIndex(presenter);
Console.WriteLine(currentValue);
Panel.SetZIndex(presenter, Zindex++);
}

如果您的程序应该运行很长时间,您可以对 Zorder 设置一些上限,因此如果达到上限,您可以找到正在使用的最小 z-index 并将其从所有控件和 Zindex 计数器的 z-index 中减去.

关于c# - Wpf 置于最前面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3463116/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com