Совместное использование векторного управления в разных местах - PullRequest
2 голосов
/ 28 мая 2010

Я пытаюсь реализовать следующее: у меня есть менеджер предметов, внутри которого есть класс предметов. Класс item может хранить два возможных его визуальных представления - BitmapImage (растровое изображение) и UserControl (вектор).

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

Таким образом, проблема в том, что источник BitmapImage может быть легко использован в приложении несколькими элементами UIE. Однако, когда я пытаюсь разделить векторный элемент управления, он завершается неудачно и говорит, что дочерний элемент уже является дочерним элементом другого элемента управления. Я хочу знать, как организовать это наилучшим образом. Например, замените UserControl другим типом элемента управления или хранилища, однако я должен быть уверен, что он поддерживает анимацию раскадровки внутри.

Код выглядит так:

    if (bi.item.BitmapSource != null)
    {
        Image previewImage = new Image();
        previewImage.Source = bi.item.BitmapSource;
        itemPane.ItemPreviewCanvas.Children.Add(previewImage);
    } else
    if (bi.item.VectorSource != null)
    {
        UserControl previewControl = bi.item.VectorSource;
        itemPane.ItemPreviewCanvas.Children.Add(previewControl);
    }

Или невозможно использовать один и тот же элемент управления в разных местах, тогда как лучше всего сделать копию или лучше всего хранить векторные данные.

Заранее спасибо

1 Ответ

1 голос
/ 28 мая 2010

Итак, я нашел проблему. Можно подключить один и тот же UserControl к разным элементам управления.

Однако при обновлении я удалял элемент управления, а затем снова заполнял его новым указателем, который иногда был таким же, как до удаления, каким-то образом он все еще оставался в памяти. И так было как 2 одинаковых пользовательских элемента управления, прикрепленных к одному и тому же родителю.

Я добавил строку кода, которая очищала все дочерние элементы управления, прежде чем обновлять его новым вектором UserControl, и теперь он работает как чудо.

...