2010-04-10 109 views
0

我对WPF/XAML相当陌生,目前我正面临一个问题。带图像的WPF自定义控件。

我有一个解决方案,其中包含两个项目,第一个项目是一个自定义控件库,里面有一个自定义的窗体控件。第二个项目是使用我的自定义窗口窗体的WPF应用程序。

除了表单图标外,所有工作都正常。在WPF应用程序项目我在我的窗口图标属性设置为/ProjectTwoNameSpace;component/Resources/Images/Film.ico,并在WPF自定义控件我试着展现形象,道:

<Image Grid.Column="0" Margin="3" Width="27" Height="27"> 
    <Image.Source> 
     <BitmapImage UriSource="{Binding Path=Icon}" /> 
    </Image.Source> 
</Image> 

但它不工作,我会在运行时错误说必须为我的<Image>标签设置属性UriSourceStreamSource

任何人都可以帮到我吗?我认为这只是一个WPF新手问题。

回答

1

BitmapImage的属性不能像显示的那样设置,因为它属于Uri类型,而您试图将其设置为字符串。我会说最简单的方法来完成你正在做的是将您的Image.Source绑定到图标,然后将字符串转换为位图图像对象。假设你的控制是一个窗口,这将是这个样子

<Window.Resources> 
    <converters:StringToBitmapImageConverter x:Key="stringToBitmapImageConverter" /> 
</Window.Resources> 

... 

<Image Grid.Column="0" Margin="3" Width="27" Height="27" 
    Source="{Binding Path=Icon, Converter={StaticResource stringToBitmapImageConverter}}"> 
</Image> 

然后转换器看起来像:

class StringToBitmapImageConverter: IValueConverter 
{ 
    #region IValueConverter Members 

    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     BitmapImage image = new BitmapImage(); 
     image.BeginInit(); 
     image.UriSource = new Uri(value as string); 
     image.EndInit(); 

     return image; 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     throw new NotImplementedException(); 
    } 

    #endregion 
} 
+1

你的解决方案是好的,但你的声明UriSource“无法通过设置数据绑定“是不真实的。你可以**将UriSource绑定到Uri类型的属性。你不能做的就是将它绑定到一个没有转换器的字符串属性。 – 2010-04-11 06:48:47

+0

当我试图粘贴标签时说,在窗口类型中找不到属性Resources,我有一个错误。我想在哪里粘贴这个XAML代码? – Karnalta 2010-04-11 13:32:46

+0

它不适用于我,我没有得到编译错误,但图像不存在。图标属性设置正确,因为我可以在任务栏中看到图标,但不在自定义控件中。也许问题来自于我的图标属性设置为WPF应用程序名称空间,并且无法在WPF控件库名称空间中找到该事实? – Karnalta 2010-04-12 07:00:53