簡體   English   中英

將圖像添加到ListView C#WPF(無xaml)

[英]Add image to ListView C# WPF (without xaml)

如何在ListView中制作圖像項目? 我需要沒有xaml,只有C#。 我大約在網上沖浪了40分鍾,卻沒有發現。 我已經嘗試了很多事情,但我在第一欄中停了下來,我只看到“ System.Windows.Controls.StackPanel”。

 public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
        GridView grView = new GridView();
        GridViewColumn gwCol1 = new GridViewColumn();
        GridViewColumn gwCol2 = new GridViewColumn();
        gwCol1.Header = "Avatar";
        gwCol2.Header = "Name";
        gwCol2.DisplayMemberBinding = new Binding("name");
        gwCol1.DisplayMemberBinding = new Binding("stack");
        grView.Columns.Add(gwCol1);
        grView.Columns.Add(gwCol2);
        listView1.View = grView;
        //
        var list = new List<XData>();
        listView1.ItemsSource = list;
        // 
        BitmapImage image1 = new BitmapImage(new Uri(@"C:\Users\montana\OneDrive\Pictures\Saved Pictures\WVQfZqY.jpg"));
        Image img = new Image();
        img.Width = 100;
        img.Height = 100;
        img.Source = image1;
        StackPanel stackPanel1 = new StackPanel();
        stackPanel1.Orientation = Orientation.Horizontal;
        stackPanel1.Children.Add(img);
        list.Add(new XData() { name="hola", stack=stackPanel1 });

    }
}


class XData
{
    public string name { get; set; }
   // public string url { get; set; }
    public StackPanel stack { get; set; }
}

這是產生想要的結果的東西。


更改XData定義以避免在那里存在視圖元素(您沒有提到MVVM,但最好堅持這樣做):

class XData
{
    public string Name { get; set; }
    public string Path { get; set; }
}

現在,您可以在xaml(通用解決方案)中定義數據模板, 也可以在背后的代碼中生成它,如下所示:

var factory = new FrameworkElementFactory(typeof(Image));
factory.SetValue(Image.SourceProperty, new Binding(nameof(XData.Path)));
factory.SetValue(Image.WidthProperty, 100.0);
factory.SetValue(Image.HeightProperty, 100.0);
var dataTemplate = new DataTemplate { VisualTree = factory };

數據模板可以隨心所欲,但是顯然可以在xaml中定義它,然后使用FindResource()進行加載要容易得多,請考慮使用此選項。

然后必須將此數據模板指定為CellTemplate如下所示:

GridView grView = new GridView();
grView.Columns.Add(new GridViewColumn { Header = "Avatar", CellTemplate = dataTemplate });
grView.Columns.Add(new GridViewColumn { Header = "Name", DisplayMemberBinding = new Binding(nameof(XData.Name)) });
listView1.View = grView;

注意 :不應將DisplayMemberBinding用於帶有CellTemplate列。

現在,最后,您可以照常設置ItemSource來填充ListView

var list = new List<XData>();
list.Add(new XData { Name = "hola", Path = @"c:\temp\1.jpg" });
list.Add(new XData { Name = "hola2", Path = @"c:\temp\2.png" });
listView1.ItemsSource = list;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM