6

我刚开始使用 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);
    }

我希望能够动态创建 ImageButtons 并将它们填充到像 WrapPanel 这样的容器中:假设我们已经有一个名为“image”的图像:

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

我需要做什么才能显示图像?我假设我需要对 DataContext 做一些事情,但我不太确定是什么或在哪里。

谢谢你的帮助

4

2 回答 2

10

您可以通过模板化一个普通的 Button 轻松获得 ImageButton,因此您根本不需要 UserControl。假设 Button.Content 将是 ImageSource。按钮的 ControlTemplate 将是:

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

并且作为以 URL 集合作为其 ItemsSource 的 ItemsControl 的用法,您可以将 WrapPanel 添加为 ItemPanel。如果您未指定,默认为 StackPanel。

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


 <ItemsControl ItemsSource="{Binding UrlCollection}" ItemsTemplate="{StaticResource dataTemplate}"/>
于 2008-10-14T04:27:21.967 回答
2

我相信这会有所帮助。它对我有用!

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

取而代之的是 Image,使用 ImageSource。EG typeof(ImageSource) 等。

于 2009-02-12T17:58:22.787 回答