2015-08-08 2 views
0

Я связан мои пункты меню в класс модели пункта меню, используя следующий код:WPF: связать свойство Icon в System.Drawing.Icon

<Window.Resources> 
    <classes:IconConverter x:Key="IconConverter"/> 

    <Style TargetType="MenuItem" x:Key="BoundMenuItemStyle"> 
     <Setter Property="Header" Value="{Binding Path=Header}" /> 
     <Setter Property="ItemsSource" Value="{Binding Path=Children}" /> 
     <Setter Property="Command" Value="{Binding Path=Command}" /> 
     <Setter Property="Icon" Value="{Binding Path=Icon, Converter={StaticResource IconConverter}}"/> 
    </Style> 
</Window.Resources> 
<DockPanel> 
    <Menu DockPanel.Dock="Top" ItemsSource="{Binding MenuItems}" ItemContainerStyle="{StaticResource BoundMenuItemStyle}"/> 
</DockPanel> 

Icon свойства класса модели имеет типа System.Drawing.Icon. Так что я написал конвертер для преобразования его в ImageSource:

class IconConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     if (value is System.Drawing.Icon) 
     { 
      var icon = value as System.Drawing.Icon; 
      ImageSource imageSource = Imaging.CreateBitmapSourceFromHIcon(
       icon.Handle, 
       System.Windows.Int32Rect.Empty, 
       System.Windows.Media.Imaging.BitmapSizeOptions.FromEmptyOptions()); 
      return imageSource; 
     } 

     return Binding.DoNothing; 
    } 

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

Проблема заключается в том, вместо значка, я получаю строку в моем меню.

ответ

0

Моя проблема заключалась в том, что я должен вернуть экземпляр Image управления от моего преобразователя:

public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     if (value is System.Drawing.Icon) 
     { 
      var icon = value as System.Drawing.Icon; 
      ImageSource imageSource = Imaging.CreateBitmapSourceFromHIcon(
       icon.Handle, 
       System.Windows.Int32Rect.Empty, 
       System.Windows.Media.Imaging.BitmapSizeOptions.FromEmptyOptions()); 
      System.Windows.Controls.Image img = new System.Windows.Controls.Image(); 
      img.Source = imageSource; 
      return img; 
     } 

     return Binding.DoNothing; 
    } 
Смежные вопросы