Пользовательский элемент управления WPF с изображением. - PullRequest
0 голосов
/ 10 апреля 2010

Я совершенно новичок в WPF/XAML, и в настоящее время я сталкиваюсь с проблемой.

У меня есть решение с двумя проектами, первый проект - это библиотека пользовательских элементов управления с пользовательским элементом управления формы внутри. Второй проект - это приложение 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>

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

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

1 Ответ

1 голос
/ 10 апреля 2010

Невозможно установить свойство 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
}
...