Анимируйте ListBoxItem от одного ListBox до другого ListBox

Вы можете создать его, используя Sprite.Create . У него есть параметр, который называется border.

5
задан BrandonS 18 December 2008 в 15:44
поделиться

3 ответа

Вот некоторый код, который я обработал для рисования визуального к битовому массиву. Вы можете адаптировать это к своим потребностям и тянуть битовый массив путем украшения 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;
        }
2
ответ дан 15 December 2019 в 01:13
поделиться

Хорошо, Вы могли попытаться брать Визуальный элемент, и установить это - предпосылки к visualbrush Вашего ListItem, и анимируйте это к другому полю списка. Можно ожидать завершенного события раскадровки, чтобы на самом деле сделать переключатель. Если бы это было я, то я анимировал бы от одного поля только к краю другого. Если переключатель происходит достаточно быстро, это должно выглядеть довольно бесшовным пользователю. Нахождение точного положения того, где объект, как предполагается, входит в поле списка, было бы довольно сложно на основе любых правил сортировки/фильтрации, которые что Вы имеете.

1
ответ дан 15 December 2019 в 01:13
поделиться

Если эти два поля списков всегда находятся в том же положении, Вы могли бы попытаться анимировать объект, по которому дважды щелкают, к предопределенному месту, скажем, на полпути между старым списком и новым списком. Затем выполните код, чтобы переместить объект в новый список, но использовать стиль, который сразу запускает анимацию на том объекте, начинающем его с того предопределенного местоположения и анимирующем к его местоположению в новом списке. Необходимо было бы, вероятно, настроить начальное смещение нового объекта во времени выполнения на основе того, где это вставляется в список.

1
ответ дан 15 December 2019 в 01:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: