簡體   English   中英

帶有單元格材料設計 PackIcon 的 WPF 數據網格

[英]WPF Datagrid with cell Material Design PackIcon

我正在嘗試使用在 c# 中生成的幾列填充數據網格。 其中一列是 PackIcon 或 PackIconMaterial,另一列是帶有多個文本列的復選框。 圖像將根據數據集合中的 int 值而變化。

<DataGrid Name="DataGrid1"/>
</DataGrid>

Code to populate the grid:

ObservableCollection<DemoModel> models = new ObservableCollection<DemoModel>();
models.Add(new DemoModel() { Text = "Some Text #1.", DynamicImg = PackIconKind.Bell });
models.Add(new DemoModel() { Text = "Some Text #2." });
models.Add(new DemoModel() { Text = "Some Text #3." });
models.Add(new DemoModel() { Text = "Some Text #4.", DynamicImg = PackIconKind.BellOutline});
models.Add(new DemoModel() { Text = "Some Text #5." });
DataGrid1.ItemsSource = models;


The model:

class DemoModel : INotifyPropertyChanged
{
    protected String _text;
    public String Text
    {
        get { return _text; }
        set { _text = value; RaisePropertyChanged("Text"); }
    }

    protected String _dynamicText;

    public String DynamicText
    {
        get { return _dynamicText; }
        set { _dynamicText = value; RaisePropertyChanged("DynamicText"); }
    }

    internal bool MyIsReadOnly = true;

    protected PackIconKind _DynamicImg;
    public PackIconKind DynamicImg
    {
        get { return _DynamicImg; }
        set {
            _DynamicImg = value;
            RaisePropertyChanged("DynamicImg");
        }
    }

    public event PropertyChangedEventHandler PropertyChanged;
    public void RaisePropertyChanged(String propertyName)
    {
        PropertyChangedEventHandler temp = PropertyChanged;
        if (temp != null)
        {
            temp(this, new PropertyChangedEventArgs(propertyName));
        }
    }
}

我用這個代碼得到的只是文本“Bell”或“BellOutline”。 我也嘗試過“public PackIcon DynamicImg”,但這似乎只是在單元格中顯示類名而不是圖像。

有人有完整的例子嗎? 我看過一些例子,但沒有一個真正完整地使用 mahapps 圖標。

使用 .Net 4.6 和 Material Design 主題 2.3.1.953。

提前致謝,史蒂夫

我認為可行的是將 DataGrid 的 AutoGenereateColumnts 屬性設置為 false 並在 XAML 中定義它們。 如果您將一列的模板定義為 PackIcon,則可以將 PackIcon 類型綁定到它。

這是和示例:

XAML 中的 DataGrid

<DataGrid AutoGenerateColumns="False" ItemsSource="{Binding Items}">
            <DataGrid.Columns>
                <DataGridTextColumn Header="Name" Binding="{Binding Name}"/>
                <DataGridTemplateColumn Header="Icon">
                    <DataGridTemplateColumn.CellTemplate>
                        <DataTemplate>
                            <materialDesign:PackIcon Kind="{Binding IconKind}"/>
                        </DataTemplate>
                    </DataGridTemplateColumn.CellTemplate>
                </DataGridTemplateColumn>
            </DataGrid.Columns>
        </DataGrid>

背后的 MainWindow 代碼

public partial class MainWindow : Window
    {
        public ObservableCollection<Item> Items { get; set; } = new ObservableCollection<Item>();
        public MainWindow()
        {
            InitializeComponent();

            this.DataContext = this;

            Items.Add(new Item
            {
                Name = "Printer",
                IconKind = PackIconKind.Printer
            });

            Items.Add(new Item
            {
                Name = "AbTesting",
                IconKind = PackIconKind.AbTesting
            });

            Items.Add(new Item
            {
                Name = "GoogleHome",
                IconKind = PackIconKind.GoogleHome
            });
        }
    }

    public class Item
    {
        public string Name { get; set; }
        public PackIconKind IconKind { get; set; }
    }

干杯,邁克爾。

暫無
暫無

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

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