Silverlight ImageButton UserControl - PullRequest
       18

Silverlight ImageButton UserControl

6 голосов
/ 14 октября 2008

Я только начинаю с Silverlight (2 RC0) и не могу заставить работать следующее. Я хочу создать простую кнопку управления изображением пользователя.

Мой xaml для пользовательского элемента управления выглядит следующим образом:

 <Button>
        <Button.Template>   
            <ControlTemplate>
                <Image Source="{TemplateBinding ImageSource}" Width="{TemplateBinding Width}" Height="{TemplateBinding Height}" />
            </ControlTemplate>
        </Button.Template>
    </Button>

Код следующий:

public partial class ImageButtonUserControl : UserControl
    {
        public ImageButtonUserControl()
        {
            InitializeComponent();
        }

        public Image Source
        {
            get { return base.GetValue(SourceProperty) as Image; }
            set { base.SetValue(SourceProperty, value); }
        }
        public static readonly DependencyProperty SourceProperty = 
            DependencyProperty.Register("SourceProperty", typeof(Image), typeof(ImageButtonUserControl),null);
    }

Я хочу иметь возможность динамически создавать кнопки ImageButton и помещать их в контейнер, такой как WrapPanel: Предположим, у нас уже есть изображение с именем «image»:

ImageButtonUserControl imageButton = new ImageButtonUserControl();
imageButton.Source = image;
this.thumbnailStackPanel.Children.Add(imageButton);

Что мне нужно сделать, чтобы изображение отображалось? Я предполагаю, что мне нужно что-то сделать с DataContext, но я не совсем уверен, что или где.

Спасибо за любую помощь

Ответы [ 2 ]

10 голосов
/ 14 октября 2008

Вы можете легко получить ImageButton, просто шаблонируя обычную кнопку, так что вам вообще не потребуется UserControl. Предполагая, что Button.Content будет ImageSource. Шаблон элемента управления Button будет:

 <ControlTemplate x:Key="btn_template">         
   <Image Source="{TemplateBinding Content}" />   
 </ControlTemplate>

И использование в качестве ItemsControl с коллекцией URL в качестве его ItemsSource. Вы можете добавить WrapPanel в качестве ItemPanel. По умолчанию будет StackPanel, если вы не укажете один.

<DataTemplate x:Key="dataTemplate">
  <Button Template="{StaticResource btn_template}" Content="{Binding}"/>
</DataTemplate>    


 <ItemsControl ItemsSource="{Binding UrlCollection}" ItemsTemplate="{StaticResource dataTemplate}"/>
2 голосов
/ 12 февраля 2009

Я верю, что это поможет. Это для меня!

http://www.nikhilk.net/Silverlight-Effects-In-Depth.aspx

Вместо изображения используйте ImageSource. НАПРИМЕР. typeof (ImageSource) и т. д.

...