以下是实现该功能的代码:

XAML 代码:

<Window x:Class="WpfApp.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="450" Width="800">
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto"/>
            <RowDefinition Height="Auto"/>
            <RowDefinition Height="*"/>
        </Grid.RowDefinitions>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="Auto"/>
            <ColumnDefinition Width="Auto"/>
            <ColumnDefinition Width="Auto"/>
            <ColumnDefinition Width="Auto"/>
            <ColumnDefinition Width="Auto"/>
            <ColumnDefinition Width="Auto"/>
            <ColumnDefinition Width="Auto"/>
            <ColumnDefinition Width="Auto"/>
        </Grid.ColumnDefinitions>

        <Button Content="新增行" Click="AddRow_Click" Grid.Row="0" Grid.Column="0"/>
        <Button Content="删除最后一行" Click="DeleteLastRow_Click" Grid.Row="0" Grid.Column="1"/>

        <Label Content="开始日期" Grid.Row="1" Grid.Column="0"/>
        <Label Content="结束日期" Grid.Row="1" Grid.Column="1"/>
        <Label Content="光源" Grid.Row="1" Grid.Column="2"/>
        <Label Content="电流" Grid.Row="1" Grid.Column="3"/>
        <Label Content="电压" Grid.Row="1" Grid.Column="4"/>
        <Label Content="泵异常温度值" Grid.Row="1" Grid.Column="5"/>
        <Label Content="泵温度值" Grid.Row="1" Grid.Column="6"/>
        <Label Content="功率异常值" Grid.Row="1" Grid.Column="7"/>
        <Label Content="功率值" Grid.Row="1" Grid.Column="8"/>

        <StackPanel Grid.Row="2" Grid.ColumnSpan="9" Orientation="Vertical" Margin="10">
            <ItemsControl ItemsSource="{Binding Rows}">
                <ItemsControl.ItemTemplate>
                    <DataTemplate>
                        <Grid>
                            <Grid.ColumnDefinitions>
                                <ColumnDefinition Width="Auto"/>
                                <ColumnDefinition Width="Auto"/>
                                <ColumnDefinition Width="Auto"/>
                                <ColumnDefinition Width="Auto"/>
                                <ColumnDefinition Width="Auto"/>
                                <ColumnDefinition Width="Auto"/>
                                <ColumnDefinition Width="Auto"/>
                                <ColumnDefinition Width="Auto"/>
                                <ColumnDefinition Width="Auto"/>
                                <ColumnDefinition Width="Auto"/>
                                <ColumnDefinition Width="Auto"/>
                            </Grid.ColumnDefinitions>

                            <DatePicker SelectedDate="{Binding StartDate}" Grid.Column="0"/>
                            <DatePicker SelectedDate="{Binding EndDate}" Grid.Column="1"/>
                            <ComboBox ItemsSource="{Binding LightSources}" SelectedItem="{Binding LightSource}" Grid.Column="2"/>
                            <TextBox Text="{Binding Current}" Grid.Column="3"/>
                            <TextBox Text="{Binding Voltage}" Grid.Column="4"/>
                            <TextBox Text="{Binding PumpAbnormalTemperature}" Grid.Column="5"/>
                            <TextBox Text="{Binding PumpTemperature}" Grid.Column="6"/>
                            <TextBox Text="{Binding PowerAbnormalValue}" Grid.Column="7"/>
                            <TextBox Text="{Binding PowerValue}" Grid.Column="8"/>
                            <Button Content="{Binding Control}" Click="Control_Click" Grid.Column="9"/>
                            <Image Source="{Binding ImageSource}" Width="20" Height="20" Grid.Column="10"/>
                        </Grid>
                    </DataTemplate>
                </ItemsControl.ItemTemplate>
            </ItemsControl>
        </StackPanel>
    </Grid>
</Window>

C# 代码:

using System;
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Media.Imaging;

namespace WpfApp
{
    public partial class MainWindow : Window
    {
        private ObservableCollection<RowModel> rows;

        public ObservableCollection<RowModel> Rows
        {
            get { return rows; }
            set
            {
                rows = value;
                OnPropertyChanged("Rows");
            }
        }

        public MainWindow()
        {
            InitializeComponent();

            Rows = new ObservableCollection<RowModel>();
            Rows.Add(new RowModel());
        }

        private void AddRow_Click(object sender, RoutedEventArgs e)
        {
            Rows.Add(new RowModel());
        }

        private void DeleteLastRow_Click(object sender, RoutedEventArgs e)
        {
            if (Rows.Count > 0)
            {
                Rows.RemoveAt(Rows.Count - 1);
            }
        }

        private void Control_Click(object sender, RoutedEventArgs e)
        {
            Button button = sender as Button;
            if (button != null)
            {
                RowModel row = button.DataContext as RowModel;
                if (row != null)
                {
                    if (row.Control == '开')
                    {
                        row.Control = '关';
                        row.ImageSource = new BitmapImage(new Uri("pack://application:,,/img/led_green.png"));
                    }
                    else
                    {
                        row.Control = '开';
                        row.ImageSource = new BitmapImage(new Uri("pack://application:,,/img/led_gray.png"));
                    }
                }
            }
        }

        public event PropertyChangedEventHandler PropertyChanged;

        private void OnPropertyChanged(string propertyName)
        {
            if (PropertyChanged != null)
            {
                PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
            }
        }
    }

    public class RowModel : INotifyPropertyChanged
    {
        private DateTime startDate;
        private DateTime endDate;
        private string lightSource;
        private string[] lightSources = { '光源1', '光源2', '光源3', '光源4', '光源5', '光源6', '光源7', '光源8', '光源9', '光源10', '光源11', '光源12', '光源13', '光源14', '光源15', '光源16', '光源17', '光源18', '光源19', '光源20' };
        private string current;
        private string voltage;
        private string pumpAbnormalTemperature;
        private string pumpTemperature;
        private string powerAbnormalValue;
        private string powerValue;
        private string control = '开';
        private BitmapImage imageSource = new BitmapImage(new Uri("pack://application:,,/img/led_gray.png"));

        public DateTime StartDate
        {
            get { return startDate; }
            set
            {
                startDate = value;
                OnPropertyChanged("StartDate");
            }
        }

        public DateTime EndDate
        {
            get { return endDate; }
            set
            {
                endDate = value;
                OnPropertyChanged("EndDate");
            }
        }

        public string LightSource
        {
            get { return lightSource; }
            set
            {
                lightSource = value;
                OnPropertyChanged("LightSource");
            }
        }

        public string[] LightSources
        {
            get { return lightSources; }
        }

        public string Current
        {
            get { return current; }
            set
            {
                current = value;
                OnPropertyChanged("Current");
            }
        }

        public string Voltage
        {
            get { return voltage; }
            set
            {
                voltage = value;
                OnPropertyChanged("Voltage");
            }
        }

        public string PumpAbnormalTemperature
        {
            get { return pumpAbnormalTemperature; }
            set
            {
                pumpAbnormalTemperature = value;
                OnPropertyChanged("PumpAbnormalTemperature");
            }
        }

        public string PumpTemperature
        {
            get { return pumpTemperature; }
            set
            {
                pumpTemperature = value;
                OnPropertyChanged("PumpTemperature");
            }
        }

        public string PowerAbnormalValue
        {
            get { return powerAbnormalValue; }
            set
            {
                powerAbnormalValue = value;
                OnPropertyChanged("PowerAbnormalValue");
            }
        }

        public string PowerValue
        {
            get { return powerValue; }
            set
            {
                powerValue = value;
                OnPropertyChanged("PowerValue");
            }
        }

        public string Control
        {
            get { return control; }
            set
            {
                control = value;
                OnPropertyChanged("Control");
            }
        }

        public BitmapImage ImageSource
        {
            get { return imageSource; }
            set
            {
                imageSource = value;
                OnPropertyChanged("ImageSource");
            }
        }

        public event PropertyChangedEventHandler PropertyChanged;

        private void OnPropertyChanged(string propertyName)
        {
            if (PropertyChanged != null)
            {
                PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
            }
        }
    }
}

原文地址: https://www.cveoy.top/t/topic/nwLe 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录