Создание изображения по умолчанию в UserControl - PullRequest
0 голосов
/ 13 октября 2009

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

Вот использование XAML:

<MyNS:TestIcon
  x:Name="m_TestIcon"
/>

Вот XAML для пользовательского элемента управления:

<UserControl
  x:Class="MyNS.TestIcon"

  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
  xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"

  x:Name="m_TestIcon"
  Height="32" Width="32"
>
  <UserControl.Resources>
    <Style TargetType="Image">
      <Setter Property="Width" Value="32" />
      <Setter Property="Height" Value="32" />
    </Style>
  </UserControl.Resources>

  <Image
    x:Name="m_TestIcon_Image"
  />

</UserControl>

Вот код:

   public partial class TestIcon : UserControl
    {
        public TestIcon()
        {
            InitializeComponent();
            m_TestIcon_Image.Source = createBitmapImageFromResource("/Resources/Images/TestIcon32.png", 32);
        }

        private static BitmapImage createBitmapImageFromResource(string resource_name, int icon_width)
        {
            // Create source
            BitmapImage myBitmapImage = new BitmapImage();

            // BitmapImage.UriSource must be in a BeginInit/EndInit block
            myBitmapImage.BeginInit();
            myBitmapImage.UriSource = new Uri(resource_name, UriKind.Relative);

            // To save significant application memory, set the DecodePixelWidth or 
            // DecodePixelHeight of the BitmapImage value of the image source to the desired
            // height or width of the rendered image. If you don't do this, the application will
            // cache the image as though it were rendered as its normal size rather then just
            // the size that is displayed.
            // Note: In order to preserve aspect ratio, set DecodePixelWidth
            // or DecodePixelHeight but not both.
            myBitmapImage.DecodePixelWidth = icon_width;
            myBitmapImage.EndInit();

            return myBitmapImage;
        }
    }

Решение

Ответ был дан по ссылке, предоставленной Tri Q ниже. Я изменил последнюю строку конструктора на следующую строку, и это сработало:

m_ViewIconUC_Image.Source = new BitmapImage(new Uri(@"/MyAssembly;component/Resources/Images/TestIcon32.png", UriKind.Relative));

1 Ответ

1 голос
/ 14 октября 2009

Попробуйте добавить свойство DependencyProperty типа BitmapImage в свой UserControl и привязать к нему элемент управления изображением. Регистрируя DP, укажите его значение по умолчанию.

...