在WPF中使控件位于最顶端

在WPF中使控件位于最顶端,wpf,topmost,Wpf,Topmost,我有一个表单,用户可以在其中选择各种表单元素并拖动它们。因为用户可以自定义表单的布局,所以我使用的是画布,所有元素都是画布的子元素 当两个元素位于同一区域时,最后添加的元素作为画布的子元素将绘制在顶部。我希望能够将任何活动元素(被拖动的元素)设置为最上面的元素 我使用了SetZOrder方法,将其设置为0,但它什么也不做。检查调用GetZOrder的所有元素后,每个元素都会得到一个0,这就是为什么将其设置为0并没有什么区别 我找到的唯一解决方案是删除元素并将其添加到画布中,而且确实有效

我有一个表单,用户可以在其中选择各种表单元素并拖动它们。因为用户可以自定义表单的布局,所以我使用的是画布,所有元素都是画布的子元素

当两个元素位于同一区域时,最后添加的元素作为画布的子元素将绘制在顶部。我希望能够将任何活动元素(被拖动的元素)设置为最上面的元素

我使用了SetZOrder方法,将其设置为0,但它什么也不做。检查调用GetZOrder的所有元素后,每个元素都会得到一个0,这就是为什么将其设置为0并没有什么区别

我找到的唯一解决方案是删除元素并将其添加到画布中,而且确实有效

        _mainCanvas.Children.Remove(_selectedElement);
        _mainCanvas.Children.Add(_selectedElement);

虽然这是可行的,但我觉得必须有一种更受欢迎和更合适的方法来实现这一点。

ZIndex确实决定了哪一种是最顶级的。最高的ZIndex获胜。尝试将您想要成为最顶端的一个的ZIndex设置为高于其他ZIndex的数字。

ZIndex确定哪个是最顶端的。最高的ZIndex获胜。试着将你想成为最高的一个的ZIndex设置为比其他人的ZIndex高的数字。

你看过Josh Smith的这篇文章吗:你看过Josh Smith的这篇文章吗:它是..@H.B.woops!这就是我从记忆中得到的。修正了。我的问题是ZIndex默认为0。它不保护具有相同ZIndex的多个控件。我可以将所有控件的ZIndex默认为1,然后当您选择一个控件时,将ZIndex设置为0,但当它未被选中时,我还必须将其设置回1。我希望我可以将ZIndex设置为0,它会自动移动所有其他ZIndex值,这样您就不必关心跟踪以前选择的元素并将ZIndex设置回更高的值。在这一点上,删除和添加控件似乎更简单。它是..@H.B.woops!这就是我从记忆中得到的。修正了。我的问题是ZIndex默认为0。它不保护具有相同ZIndex的多个控件。我可以将所有控件的ZIndex默认为1,然后当您选择一个控件时,将ZIndex设置为0,但当它未被选中时,我还必须将其设置回1。我希望我可以将ZIndex设置为0,它会自动移动所有其他ZIndex值,这样您就不必关心跟踪以前选择的元素并将ZIndex设置回更高的值。此时,删除和添加控件似乎更简单。