Проблема с привязкой значков в WPF Fluent - PullRequest
1 голос
/ 03 апреля 2011

Я использую Fluent с сайта fluent.codeplex.com.

Это работает в моем файле XAML:

<Image Name="image1" Stretch="Fill" Height="40" 
       HorizontalAlignment="Left"         
       VerticalAlignment="Top" Width="40" 
       Source="{StaticResource error_button}" />

и отображает изображение.

Когда я пытаюсь использовать его как иконку для беглой кнопки

<Fluent:Button Header="adsfasf">
  <Fluent:Button.Icon>
  <Image Height="40" HorizontalAlignment="Left" VerticalAlignment="Top" Width="40"    
         Source="{StaticResource error_button}" />
  </Fluent:Button.Icon>
</Fluent:Button>

кнопка не имеет иконки. Я что-то пропустил?

1 Ответ

3 голосов
/ 03 апреля 2011

Я не знаком с компонентом Fluent Ribbon, но просматривая исходный код, он использует его для отображения значка кнопки:

http://fluent.codeplex.com/SourceControl/changeset/view/57318#527240

<ContentPresenter 
  ...
  Content="{Binding LargeIcon, RelativeSource={RelativeSource TemplatedParent}, Converter={StaticResource StringToImageConvert}}" />

The StringToImageConvert определяется как:

<Fluent:ObjectToImageConverter x:Key="StringToImageConvert"/>

Реализация метода Convert в этом конвертере выглядит следующим образом (через отражатель - разработчики Fluent должны лучше разделять классы на свои собственные файлы).

public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
    if (value is string)
    {
        Image image = new Image();
        image.Stretch = Stretch.None;
        image.Source = new BitmapImage(new Uri(value as string, UriKind.RelativeOrAbsolute), new RequestCachePolicy(RequestCacheLevel.NoCacheNoStore));
        return image;
    }
    if (value is ImageSource)
    {
        Image image2 = new Image();
        image2.Stretch = Stretch.None;
        image2.Source = (ImageSource) value;
        return image2;
    }
    return value;
}

Итак, судя по коду, лучше всего попробовать это:

<Fluent:Button 
    Header="adsfasf" 
    Icon="{StaticResource error_button}" 
    LargeIcon="{StaticResource error_button}" 
    />
...