gpt4 book ai didi

wpf - 将 ListBoxItem 从一个 ListBox 动画到另一个 ListBox

转载 作者:行者123 更新时间:2023-12-02 04:17:44 24 4
gpt4 key购买 nike

我想在双击列表框中的项目时创建视觉效果。到目前为止,我具有拖放功能,其中项目在视觉上附加到鼠标,并且可以移动到放置目标。通过该功能,我可以使用获取项目容器的相同逻辑为项目设置动画,但是我无法离开项目控制。有什么方法可以从列表框中删除该项目并以视觉方式将其动画到另一个位置吗?基本上,主列表框是一手牌。双击卡片时,我希望它在视觉上从手牌列表框移动到丢弃列表框。到目前为止,将项目从一个集合移动到另一个集合的逻辑没有问题,但是我真的很想要此事件的动画视觉表示。任何关于如何做这样的事情的想法或引用将不胜感激。

谢谢,布兰登

有关我尝试过的更多详细信息:有一些概念我还没有掌握得很清楚,这导致我撞到了这堵墙。我有一个方法,将 ListBox 作为 ItemsControl 传入(有些可能是不必要的)、作为列表框项的 FrameworkElement 以及与 ListBox 项关联的数据对象。我试图做的是作为 Canvas 的 ListBoxItem 的 FindVisualChild 。我能做到。在我看来,我想以某种方式将 Canvas 克隆为 Canvas 或位图,将其添加到同一位置的页面子项的子项中,从 ListBox 中删除 ListBoxItem,并将克隆动画设置为丢弃桩。当动画完成时,克隆将被删除或隐藏,并且当该对象被添加到丢弃堆集合时,它将有效地替换克隆。

我的问题是,我觉得确实有一种更简单的方法可以使用装饰层或其他东西来做到这一点。我也不知道如何将克隆定位在视觉树上元素中的完全相同的位置。我将继续努力并研究其他方法,我只是希望有人能分享一些对此的见解。

最佳答案

这是我编写的一些代码,用于将视觉效果绘制到位图。您可以根据您的需要进行调整,并通过装饰代表两个 ListView 的共同祖先的 UIElement 来绘制位图。请注意使用 FrameworkElement.TransformToAncestor 来获取嵌套元素(以祖先元素为单位)的坐标。

        public static BitmapSource CreateBitmapFromElement(FrameworkElement element, Double dpiX, Double dpiY)
{
Size elementSize = new Size(element.ActualWidth, element.ActualHeight);
Visual root = GetAdornerDecoratorAncestor(element);
Rect elementBounds = element.TransformToAncestor(root).TransformBounds(new Rect(elementSize));

RenderTargetBitmap rtb = new RenderTargetBitmap((Int32)(elementBounds.Size.Width * dpiX / 96.0),
(Int32)(elementBounds.Size.Height * dpiY / 96.0),
dpiX,
dpiY,
PixelFormats.Pbgra32);

DrawingVisual dv = new DrawingVisual();
using (DrawingContext dc = dv.RenderOpen())
{
VisualBrush vb = new VisualBrush(root);
vb.ViewboxUnits = BrushMappingMode.Absolute;
vb.Stretch = Stretch.None;
vb.Viewbox = elementBounds;
dc.DrawRectangle(vb, null, new Rect(new Point(), elementBounds.Size));
}
rtb.Render(dv);
return rtb;
}

public static Visual GetAdornerDecoratorAncestor(DependencyObject obj)
{
while(obj != null && !(obj is AdornerDecorator))
{
obj = VisualTreeHelper.GetParent(obj);
}
return obj as AdornerDecorator;
}

关于wpf - 将 ListBoxItem 从一个 ListBox 动画到另一个 ListBox,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/375165/

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