1

現在、次のコードを使用して、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>

結果の出力:

ここに画像の説明を入力

4

1 に答える 1

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}}" />
于 2013-03-21T05:18:13.363 に答える