имеем 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);
}
очень странное поведение какоето... плз помогите с проблемой
Здравствуйте, bosenko, Вы писали:
B>имеем DependencyProperty как ImageBrush, пытаюсь закрасить Rectangle картинкой из этого DependencyProperty, закрашивает только в дизайнере, в реал-там не закрашивает, помогите плз...
Попробуй добавить к свойству метаданные с флагом
FrameworkPropertyMetadataOptions.AffectsRender. Хотя в приведенном примере с MouseDown это ни на что бы не повлияло, с другой стороны, в дизайнере MouseDown тоже не работал бы, следовательно написано это скорее для презентации. Короче, добавь AffectsRender.
Здравствуйте, 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);
}
и все стало отлично закрашиваться картинкой как надо!!! спс огромное за наводку!!!
и еще САМОЕ ГЛАВНОЕ В 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"
Здравствуйте, bosenko, Вы писали:
B>обязательно
B>B>ImageSource="/Bosenko.NetworkControl.Silverlight.General;component/background.jpg"
B>
Не знаю, как в Сильверлайте, но в WPF нормальная практика все картинки засовывать в ResourceDictionary, и потом уже ссылаться на них по имени. Экономит много времени и нервов.