1

コードで DataTemplate を作成していますが、XAML を使用できません。:(

テンプレート内に画像を作成できましたが、ico ファイルへのパスをハードコーディングした場合のみです。その文字列をアイテムにバインドできるようにしたいと思います (変更された ListView で DataTemplate を使用しています)。

ここに私のコードがあります:

private DataTemplate CreateDataTemplate(string binding, HorizontalAlignment alignment, bool active, bool useIcon)
{
    DataTemplate dt = new DataTemplate();

    FrameworkElementFactory sp = new FrameworkElementFactory(typeof(StackPanel));
    sp.SetValue(StackPanel.OrientationProperty, Orientation.Horizontal);

    if (useIcon)
    {
        double size = 14.0;
        BitmapImage bmp = new BitmapImage(new Uri("MyIcon.ico", UriKind.RelativeOrAbsolute));

        FrameworkElementFactory icon = new FrameworkElementFactory(typeof(Image));
        icon.SetValue(Image.SourceProperty, bmp);
        icon.SetValue(Image.WidthProperty, size);
        icon.SetValue(Image.HeightProperty, size);
        icon.SetValue(Image.MarginProperty, new Thickness(0, 0, 5, 0));
        sp.AppendChild(icon);
    }

    FrameworkElementFactory tb = new FrameworkElementFactory(typeof(TextBlock));
    tb.SetBinding(TextBlock.TextProperty, new Binding(binding));
    tb.SetValue(TextBlock.ForegroundProperty, (active ? Brushes.Black : Brushes.Gray));
    tb.SetValue(TextBlock.TextTrimmingProperty, TextTrimming.CharacterEllipsis);
    tb.SetValue(TextBlock.HorizontalAlignmentProperty, alignment);
    sp.AppendChild(tb);

    dt.VisualTree = sp;
    return dt;
}

ありがとう!

4

2 に答える 2

2

ValueConverterが機能すると思います。

public class StringToBitmapImageConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        string uristring = value as string;
        return new BitmapImage(new Uri(uristring, UriKind.RelativeOrAbsolute));
    }

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        throw new NotSupportedException();
    }
}
icon.SetBinding(Image.SourceProperty, new Binding(path) { Converter = new StringToBitmapImageConverter() });

は、テンプレート化されたオブジェクト内のuripath文字列を保持するプロパティを指すプロパティ パスです。

于 2011-06-06T20:14:59.663 に答える