Я хочу создать панель инструментов Windows (что-то вроде RocketDock), которая динамически создает кнопки из сериализованных классов, но я не могу понять, как динамически установить изображение.Кроме того, как следует сериализовать изображение (я хочу сериализовать изображение с классом хранения, вместо того, чтобы каждый раз загружать его из исходного местоположения файла png)?
Я нашел следующий код для созданиясвойство зависимости
public class ImageButton
{
#region Image dependency property
public static readonly DependencyProperty ImageProperty;
public static ImageSource GetImage(DependencyObject obj)
{
return (ImageSource)obj.GetValue(ImageProperty);
}
public static void SetImage(DependencyObject obj, ImageSource value)
{
obj.SetValue(ImageProperty, value);
}
#endregion
static ImageButton()
{
var metadata = new FrameworkPropertyMetadata((ImageSource)null);
ImageProperty = DependencyProperty.RegisterAttached("Image",
typeof(ImageSource),
typeof(ImageButton), metadata);
}
}
И я создал стиль кнопки для наследования, чтобы установить изображение
<Style x:Key="ImageButton" TargetType="{x:Type Button}">
<Setter Property="HorizontalContentAlignment" Value="Stretch" />
<Setter Property="ContentTemplate">
<Setter.Value>
<DataTemplate>
<Grid>
<Image Source="{Binding Path=(Extender:ImageButton.Image), RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Button}}}"
HorizontalAlignment="Left" Margin="8,0,0,0" Height="16" Width="16" />
<TextBlock Text="{TemplateBinding Content}" HorizontalAlignment="Center" />
</Grid>
</DataTemplate>
</Setter.Value>
</Setter>
</Style>
, но я не могу понять, как установить изображение из кода после созданиякнопка
var newButton = new Button();
var style = (Style)FindResource("ImageButton");
newButton.Image не разрешается.Нужно ли что-то делать с style.Resources?
EDIT - ответ Олли
Спасибо, но ... Используя ...
Link link = new Link(@"c:\temp\dev\ClearAllIcon.png");
var newButton = new Button();
newButton.Content = "bloberific";
var style = (Style)FindResource("ImageButton");
ImageButton.SetImage(newButton, link.IconSource);
MainStack.Children.Add(newButton);
, где ссылка определяется как
public Link(string iconPath)
{
IconPath = iconPath;
IconSource = new BitmapImage(new Uri(iconPath));
}
, изображение не отображается, хотя текст отображается.Кнопка выглядит нормально.