Image.Source在使用字符串格式化绑定时不显示图像

时间:2013-03-21 04:48:39

标签: c# .net wpf wpf-4.0

我目前正在使用以下代码构建一个带有标记图像和加拿大省名称的ComboBox控件。但是图像没有显示在控件中。我已经测试了绑定并且它正确地生成了位置,但是图像不会出现在控件中。

不确定这里有什么问题不胜感激

代码:

<ComboBox x:Name="cb_Provinces" Text="Province"SelectionChanged="ComboBox_SelectionChanged"  SelectedValuePath="ProvinceCode" ItemsSource="{Binding Provinces, RelativeSource={RelativeSource AncestorType={x:Type UserControl}}}">
    <ComboBox.ItemTemplate>
        <DataTemplate >
            <StackPanel>
                <StackPanel x:Name="stk_ComboTemplate" Orientation="Horizontal" HorizontalAlignment="Left">
                    <Image Width="25" Margin="10" Source="{Binding ProvinceCode, StringFormat=/CanadaTreeSvc.Interface;component/Resources/img/flags/\{0\}.gif}" />

                    <TextBlock Text="{Binding ProvinceName}"/>

                </StackPanel>
                <TextBlock FontSize="10" Foreground="Gray" Text="{Binding ProvinceCode, StringFormat=/CanadaTreeSvc.Interface;component/Resources/img/flags/\{0\}.gif}"/>

            </StackPanel>
        </DataTemplate>
    </ComboBox.ItemTemplate>

产生的结果:

enter image description here

1 个答案:

答案 0 :(得分:3)

StringFormat仅在目标类型为String时才有效。 由于Image Source的类型为Uri,因此StringFormat

中永远不会使用Binding

最好的选择是让IValueConverter格式化string并将其返回Image Source属性。

示例:

public class ProvinceNameToImageSourceConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        return string.Format("/CanadaTreeSvc.Interface;component/Resources/img/flags/\{0\}.gif", value);
    }

    public object ConvertBack(object value, Type targetTypes, object parameter, System.Globalization.CultureInfo culture)
    {
        return null;
    }
}

用法:

<Window.Resources>
    <local:ProvinceNameToImageSourceConverter x:Key="ImageConverter" />
</Window.Resources>

..................

   <Image Source="{Binding ProvinceCode, Converter={StaticResource ImageConverter}}" />