Почему изображение не появляется при рендеринге раньше? - PullRequest
0 голосов
/ 07 ноября 2011

Начиная с недавно созданного проекта, я добавляю кнопку на свою главную страницу и выполняю в обработчике кликов следующее:

Я создаю Image и присваиваю BitmapImage в качестве Source. Затем я добавляю Image к своему LayoutRoot. Я ожидаю, что я увижу изображение в графическом интерфейсе после нажатия кнопки.

Теперь есть поворот: я также хочу сделать это Image в WriteableBitmap. Поэтому я создаю такое растровое изображение и вызываю его метод Render для визуализации изображения.

Вот в чем проблема: когда я закомментирую вызов Render, я сразу же вижу, что Image появляется на моей главной странице. Когда я включаю вызов Render, изображение появляется не при первом нажатии кнопки , а при втором . Почему?

Вот код:

    private void button1_Click(object sender, RoutedEventArgs e)
    {

        WriteableBitmap wbmp = new WriteableBitmap(62, 62);
        BitmapImage bmp = new BitmapImage(new Uri("ApplicationIcon.png", UriKind.Relative));
        Image img = new Image() { Width = 62, Height = 62, Source = bmp };

        wbmp.Render(img, null); // <------ this line makes the difference

        LayoutRoot.Children.Add(img);
    }

Ответы [ 2 ]

0 голосов
/ 15 ноября 2011

Есть несколько замечаний об использовании Render (может быть одно из них делает вашу проблему):

После вызова этого метода вы должны вызвать Invalidate, чтобы сделать растровое изображение.

Этот метод поддерживает объекты UIElement, которые не являются частью визуальное дерево. Вы должны позвонить Измерить и организовать Объекты UIElement, которых нет в визуальном дереве, перед вызовом Render.

0 голосов
/ 15 ноября 2011

попробуйте это ..

 private Image _img = new Image ();
    public Image img
    {
        get
        {
            return _img;
        }
    }
 public event PropertyChangedEventHandler PropertyChanged;
    private void NotifyPropertyChanged(String PropertyName)
    {
        if (null != PropertyChanged)
        {
            PropertyChanged(this, new PropertyChangedEventArgs(PropertyName));
        }
    }
 private void button1_Click(object sender, RoutedEventArgs e)
{

    WriteableBitmap wbmp = new WriteableBitmap(62, 62);
    BitmapImage bmp = new BitmapImage(new Uri("ApplicationIcon.png", UriKind.Relative));
    Image img = new Image() { Width = 62, Height = 62, Source = bmp };

    wbmp.Render(img, null); // <------ this line makes the difference

    LayoutRoot.Children.Add(img);

      NotifyPropertyChanged("Image");
}

это должно сработать .. попробуйте один раз ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...