2009-10-13 4 views
0

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

Здесь использование 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

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

Смежные вопросы