[WPF] ImageBrush из ресурса
От: bosenko  
Дата: 07.01.11 22:59
Оценка:
имеем DependencyProperty как ImageBrush, пытаюсь закрасить Rectangle картинкой из этого DependencyProperty, закрашивает только в дизайнере, в реал-там не закрашивает, помогите плз...

public static DependencyProperty TileBrushProperty = DependencyProperty.Register("TileBrush", typeof(ImageBrush), typeof(TilePanel), null);
public ImageBrush TileBrush
{
   get { return (ImageBrush)GetValue(TileBrushProperty); }
   set { SetValue(TileBrushProperty, value); }
}


а если явно указать путь к картинке то все ок — закрашивает везде

private void UserControl_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
Rectangle rect = new Rectangle();
rect.Width = 500;
rect.Height = 500;
ImageBrush ibrush = new ImageBrush();
ibrush.ImageSource = new BitmapImage(new Uri("/General;component/Controls/background.jpg", UriKind.Relative));
rect.Fill = ibrush; 
this.LayoutRoot.Children.Add(rect);
}


а если пытаюсь брать картинку из DependencyProperty, в реал-тайме не закрашивает а в дизайн моде все ок

private void UserControl_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
Rectangle rect = new Rectangle();
rect.Width = 500;
rect.Height = 500;
[code]
rect.Fill = tileBrush;
this.LayoutRoot.Children.Add(rect);
}


очень странное поведение какоето... плз помогите с проблемой
imagebrush dependencyproperty fill background
Re: [WPF] ImageBrush из ресурса
От: MxMsk Португалия  
Дата: 08.01.11 07:46
Оценка: 3 (1) +1
Здравствуйте, bosenko, Вы писали:

B>имеем DependencyProperty как ImageBrush, пытаюсь закрасить Rectangle картинкой из этого DependencyProperty, закрашивает только в дизайнере, в реал-там не закрашивает, помогите плз...

Попробуй добавить к свойству метаданные с флагом FrameworkPropertyMetadataOptions.AffectsRender. Хотя в приведенном примере с MouseDown это ни на что бы не повлияло, с другой стороны, в дизайнере MouseDown тоже не работал бы, следовательно написано это скорее для презентации. Короче, добавь AffectsRender.
Re[2]: [WPF] ImageBrush из ресурса
От: bosenko  
Дата: 08.01.11 18:43
Оценка:
Здравствуйте, MxMsk, Вы писали:


FrameworkPropertyMetadataOptions.AffectsRender


спасибо за наводку, но т.к я пишу на Silverlight 4 там оказывается отсутствует FrameworkPropertyMetadataOptions, но это правильный путь!!!
вообщем поискал еще и нашел аналог AffectsRender для Silverlight


        public static DependencyProperty TileImageProperty = DependencyProperty.Register("TileImage", typeof(Brush), typeof(TilePanel), new PropertyMetadata(null, new PropertyChangedCallback(TileImageProperty_Changed)));
        
        public Brush TileImage
        {
            get { return (Brush)GetValue(TileImageProperty); }
            set { SetValue(TileImageProperty, value); }
        }

        private static void TileImageProperty_Changed(DependencyObject sender, DependencyPropertyChangedEventArgs e)
        {
            Rectangle rect = new Rectangle();
            rect.Width = 50;
            rect.Height = 50;
            rect.Fill = e.NewValue as Brush;
            //rect.Fill = new SolidColorBrush(Colors.Red);
            (sender as TilePanel).LayoutRoot.Children.Add(rect);
        }


и все стало отлично закрашиваться картинкой как надо!!! спс огромное за наводку!!!
Re: [WPF] ImageBrush из ресурса
От: bosenko  
Дата: 09.01.11 18:30
Оценка:
и еще САМОЕ ГЛАВНОЕ В Silverlight проблема



<Controls:TilePanel>
            <Controls:TilePanel.Background>
                <ImageBrush Stretch="Fill" ImageSource="/NameSpace;component/background.jpg"/>
            </Controls:TilePanel.Background>
</Controls:TilePanel>



обязательно
ImageSource="/Bosenko.NetworkControl.Silverlight.General;component/background.jpg"
Re[2]: [WPF] ImageBrush из ресурса
От: Codechanger Россия  
Дата: 11.01.11 08:11
Оценка:
Здравствуйте, bosenko, Вы писали:

B>обязательно

B>
B>ImageSource="/Bosenko.NetworkControl.Silverlight.General;component/background.jpg"
B>


Не знаю, как в Сильверлайте, но в WPF нормальная практика все картинки засовывать в ResourceDictionary, и потом уже ссылаться на них по имени. Экономит много времени и нервов.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.