2010-04-10 2 views
0

Я совершенно новый для WPF/XAML, и в настоящее время у меня возникла проблема.WPF Custom Control с изображением.

У меня есть решение с двумя проектами в нем, первый проект - это библиотека пользовательского контроля с пользовательским элементом управления формой окна. Второй проект - это приложение WPF, использующее мою собственную форму окна.

Все работает нормально, за исключением формы Icon. В проекте приложения 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> 

Но это не работает, я получаю сообщение об ошибке во время выполнения, говоря что свойство UriSource или StreamSource должно быть установлено для моего тега <Image>.

Кто-нибудь может мне помочь? Я думаю, что это проблема с новичком WPF.

ответ

1

Свойство UriSource объекта BitmapImage не может быть установлено так, как вы указали, потому что оно имеет тип Uri, и вы пытаетесь установить его в строку. Я бы сказал, что самый простой способ выполнить то, что вы делаете, - связать свой Image.Source с Icon, а затем преобразовать строку в растровый объект Image. Если предположить, что контроль находится в окне, это будет выглядеть как этот

<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. То, что вы не можете сделать, это связать его со строковым свойством без конвертера. –

+0

У меня возникла ошибка при попытке вставить тег , говорящий, что свойство Resources не было найдено внутри типа окна. Где я могу вставить этот код XAML? – Karnalta

+0

Это не работает для меня, я не получаю ошибку компиляции, но изображения там нет. Свойство значка правильно установлено, потому что я вижу значок на панели задач, но не в моем настраиваемом элементе управления. Может быть, проблема связана с тем, что мое свойство icon установлено в пространство имен приложений WPF и не может быть найдено в пространстве имен библиотеки управления WPF? – Karnalta