3

IValueconverter に問題があり、行グリッド イメージを動的にロードします。

public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{

    string Type = (string)value;
    Uri uri;
    try
    {
        uri = new Uri("/XConsole;component/Images/" + Type + ".png", UriKind.Relative);
        return new System.Windows.Media.Imaging.BitmapImage(uri) { CacheOption = BitmapCacheOption.None };
    }
    catch (Exception e)
    {
        //donothing
    }
    uri = new Uri("/XConsole;component/Images/Type_SYSTEM.png", UriKind.Relative);
    return new System.Windows.Media.Imaging.BitmapImage(uri) { CacheOption = BitmapCacheOption.None };

}

オブジェクトの「タイプ」をコンバーターに渡し、さまざまな画像をロードしたい:

 <Image Grid.Column="0"  Width="25" Height="25" Margin="2,0" Source="{Binding Path=Type, Converter={StaticResource imageConverter}}" >

しかし、画像がロードされていないため、何か問題があります!

静的にロードする場合は問題ありません:

 <Image Grid.Column="0"  Width="25" Height="25" Margin="2,0" Source="/XconsoleTest;component/Images/Type_DB.png" >

私は自分のコンバーターを UserControl.Resources にロードしました:

<UserControl.Resources>
    <converters:ImageConverter x:Key="imageConverter"/>
</UserControl.Resources>

助けて!!

4

1 に答える 1

4

コードで URI を作成する場合は、その部分を含む完全なPack URIを記述する必要があります。pack://application:,,,XAML では、string-to-ImageSource TypeConverter によって自動的に追加されるため、これは必要ありません。

var type = (string)value;
var uri = new Uri("pack://application:,,,/XConsole;component/Images/" + type + ".png");

上記のコード サンプルでは、​​クラスとの混同を避けるため、type代わりに小文字の識別子を使用していることに注意してください。TypeType

于 2013-02-13T17:11:14.073 に答える