Expondo uma propriedade ImageSource em um UserControl para uso no Blend
-
03-07-2019 - |
Pergunta
Eu tenho um controle de usuário que expõe uma propriedade do tipo ImageSource. Eu quero expor essa propriedade no Blend para que eu possa editá-lo no Blend, em vez de especificar a imagem no código.
Com base no que Eu pesquisei, eu adicionei uma propriedade de dependência, e especificou atributos adequados para expor a propriedade em Blend.
Eu posso vê-lo lá, e editá-lo (como um campo de texto). O que eu quero fazer é ter uma lista suspensa de recursos de imagem disponíveis para baixo, e um botão de navegação para carregar até uma outra imagem. Em outras palavras, eu quero que ele se comportar como a propriedade 'Fonte' do controle 'Imagem'.
editar Apenas como um aparte, tenho notado que a exposição Alinhamento ou propriedades de margem se comporta como esperado, ele só parece ser imagens que não funcionam. Estou realmente preso em um presente e gostaria de receber ajuda!
Os meus olhares de código atual, como:
public static readonly DependencyProperty ImageSourceProperty =
DependencyProperty.Register("ImageSource", typeof(ImageSource), typeof(SmartButton));
[Category("Appearance")]
[Bindable(true)]
[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
public ImageSource ImageSource
{
get { return (ImageSource)GetValue(ImageSourceProperty); }
set
{
SetValue(ImageSourceProperty, value);
this.BackgroundImage.Source = value;
}
}
Solução
Eu tenho trabalhado em quase exatamente este problema (menos Blend, além de usar a propriedade em um ControlTemplate em XAML.)
No meu caso eu ter começado a trabalhar, alterando ImageSource
para BitmapSource
. ImageSource é abstrato, BitmapSource estende ImageSource.
No entanto, algo não se sente bem sobre isso. O tipo de Image.Source é ImageSource. Se é ou não é abstrato, parece que eu deveria ser capaz de usar um DependencyProperty do tipo ImageSource.
Assim, para o meu próprio caso, eu tenho que trabalhar com BitmapSource
mas eu ainda estou investigando.
EDIT: Espero que você não se importa uma resposta quase um ano depois que você perguntou: +/- 12 horas. ;)
EDIT2: George, eu também queria chegar a este trabalho para mim com ImageSource
usando:
public static readonly DependencyProperty SourceProperty =
Image.SourceProperty.AddOwner(typeof(MyCustomButton));
public ImageSource Source
{
get { return (ImageSource)GetValue(SourceProperty); }
set { SetValue(SourceProperty, value); }
}