miki969696

revit开发控件wpf

写了一些revit扩展开发中界面各种wpf元素的示例,放在这里  拿来修改使用

using Autodesk.Revit.Attributes;
using Autodesk.Revit.DB;
using Autodesk.Revit.UI;
using System;
using System.Collections.Generic;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Media;
using System.Windows.Media.Imaging;

namespace RevitWpfControlsDemo
{
    [Transaction(TransactionMode.Manual)]
    public class ShowControlsCommand : IExternalCommand
    {
        public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
        {
            // 创建并显示自定义WPF窗口
            var window = new ControlsWindow(commandData.Application);
            window.ShowDialog();
            return Result.Succeeded;
        }
    }

    // 简单的数据模型类,用于DataGrid演示
    public class SampleData
    {
        public int ID { get; set; }
        public string Name { get; set; }
        public string Category { get; set; }
        public double Value { get; set; }
        public bool IsActive { get; set; }
    }

    public class ControlsWindow : Window
    {
        // 定义各种控件
        private System.Windows.Controls.TextBox _textBox;
        private PasswordBox _passwordBox;
        private CheckBox _checkBox1;
        private CheckBox _checkBox2;
        private RadioButton _radioBtn1;
        private RadioButton _radioBtn2;
        private System.Windows.Controls.ComboBox _comboBox;
        private Slider _slider;
        private DatePicker _datePicker;
        private TextBlock _statusText;
        private ListBox _listBox;
        private ProgressBar _progressBar;
        private Button _executeButton;
        private Image _imageControl;
        private DataGrid _dataGrid;

        public ControlsWindow(UIApplication app)
        {
            // 窗口基本设置
            Title = "Revit控件演示窗口";
            Width = 900; // 增加宽度以容纳更多内容
            Height = 700; // 增加高度
            WindowStartupLocation = WindowStartupLocation.CenterScreen;
            Background = new SolidColorBrush(System.Windows.Media. Color.FromRgb(240, 240, 240));

            // 创建主容器 - 使用Grid而不是StackPanel以便更好地控制布局
            var mainGrid = new System.Windows.Controls.Grid();
            mainGrid.Margin = new Thickness(10);

            // 定义列
            mainGrid.ColumnDefinitions.Add(new ColumnDefinition { Width = new GridLength(1, GridUnitType.Star) });

            // 创建滚动容器放置所有控件
            var scrollViewer = new ScrollViewer
            {
                VerticalScrollBarVisibility = ScrollBarVisibility.Auto,
                HorizontalScrollBarVisibility = ScrollBarVisibility.Disabled
            };

            var contentPanel = new StackPanel { Margin = new Thickness(5) };

            // 添加标题
            contentPanel.Children.Add(CreateTitleSection());
            contentPanel.Children.Add(new Separator { Margin = new Thickness(0, 5, 0, 10) });

            // 添加各种控件组
            contentPanel.Children.Add(CreateTextBoxSection());
            contentPanel.Children.Add(new Separator { Margin = new Thickness(0, 8, 0, 8) });

            contentPanel.Children.Add(CreateCheckBoxSection());
            contentPanel.Children.Add(new Separator { Margin = new Thickness(0, 8, 0, 8) });

            contentPanel.Children.Add(CreateRadioButtonSection());
            contentPanel.Children.Add(new Separator { Margin = new Thickness(0, 8, 0, 8) });

            contentPanel.Children.Add(CreateComboBoxSection());
            contentPanel.Children.Add(new Separator { Margin = new Thickness(0, 8, 0, 8) });

            contentPanel.Children.Add(CreateListBoxSection());
            contentPanel.Children.Add(new Separator { Margin = new Thickness(0, 8, 0, 8) });

            contentPanel.Children.Add(CreateDataGridSection());
            contentPanel.Children.Add(new Separator { Margin = new Thickness(0, 8, 0, 8) });

            contentPanel.Children.Add(CreateImageSection());
            contentPanel.Children.Add(new Separator { Margin = new Thickness(0, 8, 0, 8) });

            contentPanel.Children.Add(CreateSliderSection());
            contentPanel.Children.Add(new Separator { Margin = new Thickness(0, 8, 0, 8) });

            contentPanel.Children.Add(CreateDatePickerSection());
            contentPanel.Children.Add(new Separator { Margin = new Thickness(0, 8, 0, 8) });

            contentPanel.Children.Add(CreateProgressBarSection());
            contentPanel.Children.Add(new Separator { Margin = new Thickness(0, 8, 0, 8) });

            contentPanel.Children.Add(CreateButtonSection(app));

            // 状态文本
            _statusText = new TextBlock
            {
                Text = "就绪",
                Margin = new Thickness(5, 10, 5, 5),
                Foreground = Brushes.DarkGreen
            };
            contentPanel.Children.Add(_statusText);

            scrollViewer.Content = contentPanel;

            // 将滚动查看器添加到主网格
            System.Windows.Controls.Grid.SetColumn(scrollViewer, 0);
            mainGrid.Children.Add(scrollViewer);

            // 设置窗口内容
            Content = mainGrid;

            // 添加事件处理
            SetupEventHandlers();
        }

        // 创建标题部分
        private StackPanel CreateTitleSection()
        {
            return new StackPanel
            {
                Children =
                {
                    new TextBlock
                    {
                        Text = "Revit二次开发控件演示",
                        FontSize = 18,
                        FontWeight = FontWeights.Bold,
                        Foreground = Brushes.DarkBlue,
                        Margin = new Thickness(0, 5, 0, 5)
                    },
                    new TextBlock
                    {
                        Text = "包含Image和DataGrid控件演示",
                        FontSize = 12,
                        Foreground = Brushes.DarkGray,
                        Margin = new Thickness(0, 0, 0, 5)
                    }
                }
            };
        }

        // 创建文本框部分
        private StackPanel CreateTextBoxSection()
        {
            var panel = new StackPanel { Margin = new Thickness(5) };

            panel.Children.Add(new TextBlock
            {
                Text = "文本输入控件",
                FontSize = 14,
                FontWeight = FontWeights.SemiBold,
                Margin = new Thickness(0, 5, 0, 8)
            });

            // 文本框
            var textBoxPanel = new StackPanel { Orientation = Orientation.Horizontal, Margin = new Thickness(5) };
            textBoxPanel.Children.Add(new TextBlock { Text = "文本框: ", Width = 80, VerticalAlignment = VerticalAlignment.Center });

            _textBox = new System.Windows.Controls.TextBox { Width = 200, Height = 25, ToolTip = "请输入文本" };
            textBoxPanel.Children.Add(_textBox);
            panel.Children.Add(textBoxPanel);

            // 密码框
            var passwordPanel = new StackPanel { Orientation = Orientation.Horizontal, Margin = new Thickness(5, 10, 5, 5) };
            passwordPanel.Children.Add(new TextBlock { Text = "密码框: ", Width = 80, VerticalAlignment = VerticalAlignment.Center });

            _passwordBox = new PasswordBox { Width = 200, Height = 25, ToolTip = "请输入密码" };
            passwordPanel.Children.Add(_passwordBox);
            panel.Children.Add(passwordPanel);

            return panel;
        }

        // 创建复选框部分
        private StackPanel CreateCheckBoxSection()
        {
            var panel = new StackPanel { Margin = new Thickness(5) };

            panel.Children.Add(new TextBlock
            {
                Text = "复选框控件",
                FontSize = 14,
                FontWeight = FontWeights.SemiBold,
                Margin = new Thickness(0, 5, 0, 8)
            });

            _checkBox1 = new CheckBox { Content = "选项 1", Margin = new Thickness(10, 2, 0, 2) };
            _checkBox2 = new CheckBox { Content = "选项 2", Margin = new Thickness(10, 8, 0, 2) };

            panel.Children.Add(_checkBox1);
            panel.Children.Add(_checkBox2);

            return panel;
        }

        // 创建单选按钮部分
        private StackPanel CreateRadioButtonSection()
        {
            var panel = new StackPanel { Margin = new Thickness(5) };

            panel.Children.Add(new TextBlock
            {
                Text = "单选按钮控件",
                FontSize = 14,
                FontWeight = FontWeights.SemiBold,
                Margin = new Thickness(0, 5, 0, 8)
            });

            var group = new StackPanel { Margin = new Thickness(5) };
            var radioGroup = new GroupBox { Header = "选择类型", Content = group, Margin = new Thickness(0, 2, 0, 2) };

            _radioBtn1 = new RadioButton { Content = "类型 A", Margin = new Thickness(5, 2, 0, 2), IsChecked = true };
            _radioBtn2 = new RadioButton { Content = "类型 B", Margin = new Thickness(5, 8, 0, 2) };

            group.Children.Add(_radioBtn1);
            group.Children.Add(_radioBtn2);
            panel.Children.Add(radioGroup);

            return panel;
        }

        // 创建下拉列表部分
        private StackPanel CreateComboBoxSection()
        {
            var panel = new StackPanel { Margin = new Thickness(5) };

            panel.Children.Add(new TextBlock
            {
                Text = "下拉列表控件",
                FontSize = 14,
                FontWeight = FontWeights.SemiBold,
                Margin = new Thickness(0, 5, 0, 8)
            });

            var comboPanel = new StackPanel { Orientation = Orientation.Horizontal, Margin = new Thickness(5) };
            comboPanel.Children.Add(new TextBlock { Text = "选择项: ", Width = 80, VerticalAlignment = VerticalAlignment.Center });

            _comboBox = new System.Windows.Controls.ComboBox { Width = 200, Height = 25 };
            _comboBox.Items.Add("选项 1");
            _comboBox.Items.Add("选项 2");
            _comboBox.Items.Add("选项 3");
            _comboBox.SelectedIndex = 0;

            comboPanel.Children.Add(_comboBox);
            panel.Children.Add(comboPanel);

            return panel;
        }

        // 创建列表框部分
        private StackPanel CreateListBoxSection()
        {
            var panel = new StackPanel { Margin = new Thickness(5) };

            panel.Children.Add(new TextBlock
            {
                Text = "列表框控件",
                FontSize = 14,
                FontWeight = FontWeights.SemiBold,
                Margin = new Thickness(0, 5, 0, 8)
            });

            _listBox = new ListBox { Height = 100, Width = 300, Margin = new Thickness(5, 0, 5, 5) };
            _listBox.Items.Add("列表项 1");
            _listBox.Items.Add("列表项 2");
            _listBox.Items.Add("列表项 3");
            _listBox.Items.Add("列表项 4");
            _listBox.SelectionMode = SelectionMode.Extended;

            panel.Children.Add(_listBox);

            return panel;
        }

        // 创建DataGrid部分
        private StackPanel CreateDataGridSection()
        {
            var panel = new StackPanel { Margin = new Thickness(5) };

            panel.Children.Add(new TextBlock
            {
                Text = "DataGrid数据表格控件",
                FontSize = 14,
                FontWeight = FontWeights.SemiBold,
                Margin = new Thickness(0, 5, 0, 8)
            });

            // 创建DataGrid
            _dataGrid = new DataGrid
            {
                Height = 150,
                Width = 600,
                Margin = new Thickness(5, 0, 5, 5),
                AutoGenerateColumns = false,
                CanUserAddRows = false,
                CanUserDeleteRows = false,
                SelectionMode = DataGridSelectionMode.Extended
            };

            // 定义列
            _dataGrid.Columns.Add(new DataGridTextColumn { Header = "ID", Binding = new System.Windows.Data.Binding("ID"), Width = 50 });
            _dataGrid.Columns.Add(new DataGridTextColumn { Header = "名称", Binding = new System.Windows.Data.Binding("Name"), Width = 120 });
            _dataGrid.Columns.Add(new DataGridTextColumn { Header = "类别", Binding = new System.Windows.Data.Binding("Category"), Width = 100 });
            _dataGrid.Columns.Add(new DataGridTextColumn { Header = "数值", Binding = new System.Windows.Data.Binding("Value"), Width = 80 });
            _dataGrid.Columns.Add(new DataGridCheckBoxColumn { Header = "激活", Binding = new System.Windows.Data.Binding("IsActive"), Width = 60 });

            // 添加示例数据
            var sampleData = new List<SampleData>
            {
                new SampleData { ID = 1, Name = "项目A", Category = "类别1", Value = 10.5, IsActive = true },
                new SampleData { ID = 2, Name = "项目B", Category = "类别2", Value = 20.3, IsActive = false },
                new SampleData { ID = 3, Name = "项目C", Category = "类别1", Value = 15.7, IsActive = true },
                new SampleData { ID = 4, Name = "项目D", Category = "类别3", Value = 8.9, IsActive = true },
                new SampleData { ID = 5, Name = "项目E", Category = "类别2", Value = 25.1, IsActive = false }
            };

            _dataGrid.ItemsSource = sampleData;

            panel.Children.Add(_dataGrid);

            // 添加DataGrid操作按钮
            var gridButtonPanel = new StackPanel { Orientation = Orientation.Horizontal, Margin = new Thickness(5, 10, 5, 5) };

            var addRowButton = new Button { Content = "添加行", Width = 80, Height = 25, Margin = new Thickness(0, 0, 10, 0) };
            var deleteRowButton = new Button { Content = "删除行", Width = 80, Height = 25, Margin = new Thickness(0, 0, 10, 0) };
            var refreshButton = new Button { Content = "刷新", Width = 80, Height = 25 };

            addRowButton.Click += AddRowButton_Click;
            deleteRowButton.Click += DeleteRowButton_Click;
            refreshButton.Click += RefreshButton_Click;

            gridButtonPanel.Children.Add(addRowButton);
            gridButtonPanel.Children.Add(deleteRowButton);
            gridButtonPanel.Children.Add(refreshButton);
            panel.Children.Add(gridButtonPanel);

            return panel;
        }

        // 创建图像部分
        private StackPanel CreateImageSection()
        {
            var panel = new StackPanel { Margin = new Thickness(5) };

            panel.Children.Add(new TextBlock
            {
                Text = "Image图像控件",
                FontSize = 14,
                FontWeight = FontWeights.SemiBold,
                Margin = new Thickness(0, 5, 0, 8)
            });

            // 创建图像控件
            _imageControl = new Image
            {
                Width = 200,
                Height = 150,
                Margin = new Thickness(5, 0, 5, 5),
                Stretch = Stretch.Uniform,
                ToolTip = "示例图像"
            };

            // 尝试加载一个示例图像(使用内置的图标)
            try
            {
                // 使用WPF内置的图标作为示例
                var bitmap = new BitmapImage(new Uri("pack://application:,,,/System.Windows.Extensions;component/Resources/Globe.ico"));
                _imageControl.Source = bitmap;
            }
            catch
            {
                // 如果加载失败,创建一个简单的彩色矩形作为替代
                var drawingVisual = new DrawingVisual();
                using (var drawingContext = drawingVisual.RenderOpen())
                {
                    drawingContext.DrawRectangle(Brushes.LightBlue, null, new Rect(0, 0, 200, 150));
                    drawingContext.DrawText(
                        new System.Windows.Media. FormattedText("示例图像",
                            System.Globalization.CultureInfo.CurrentCulture,
                            FlowDirection.LeftToRight,
                            new Typeface("Arial"),
                            16,
                            Brushes.DarkBlue,
                            VisualTreeHelper.GetDpi(this).PixelsPerDip),
                        new System.Windows.Point(50, 60));
                }

                var renderTarget = new RenderTargetBitmap(200, 150, 96, 96, PixelFormats.Pbgra32);
                renderTarget.Render(drawingVisual);
                _imageControl.Source = renderTarget;
            }

            panel.Children.Add(_imageControl);

            // 添加图像操作按钮
            var imageButtonPanel = new StackPanel { Orientation = Orientation.Horizontal, Margin = new Thickness(5, 10, 5, 5) };

            var changeImageButton = new Button { Content = "更换图像", Width = 100, Height = 25, Margin = new Thickness(0, 0, 10, 0) };
            var resetImageButton = new Button { Content = "重置图像", Width = 100, Height = 25 };

            changeImageButton.Click += ChangeImageButton_Click;
            resetImageButton.Click += ResetImageButton_Click;

            imageButtonPanel.Children.Add(changeImageButton);
            imageButtonPanel.Children.Add(resetImageButton);
            panel.Children.Add(imageButtonPanel);

            return panel;
        }

        // 创建滑块部分
        private StackPanel CreateSliderSection()
        {
            var panel = new StackPanel { Margin = new Thickness(5) };

            panel.Children.Add(new TextBlock
            {
                Text = "滑块控件",
                FontSize = 14,
                FontWeight = FontWeights.SemiBold,
                Margin = new Thickness(0, 5, 0, 8)
            });

            var sliderPanel = new StackPanel { Margin = new Thickness(5) };

            _slider = new Slider { Minimum = 0, Maximum = 100, Value = 50, Width = 300, TickFrequency = 10, IsSnapToTickEnabled = true };
            var sliderValueText = new TextBlock { Margin = new Thickness(0, 8, 0, 0) };

            // 绑定滑块值到文本块
            sliderValueText.SetBinding(TextBlock.TextProperty, new System.Windows.Data.Binding("Value")
            {
                Source = _slider,
                StringFormat = "当前值: {0}"
            });

            sliderPanel.Children.Add(_slider);
            sliderPanel.Children.Add(sliderValueText);
            panel.Children.Add(sliderPanel);

            return panel;
        }

        // 创建日期选择器部分
        private StackPanel CreateDatePickerSection()
        {
            var panel = new StackPanel { Margin = new Thickness(5) };

            panel.Children.Add(new TextBlock
            {
                Text = "日期选择控件",
                FontSize = 14,
                FontWeight = FontWeights.SemiBold,
                Margin = new Thickness(0, 5, 0, 8)
            });

            var datePanel = new StackPanel { Orientation = Orientation.Horizontal, Margin = new Thickness(5) };
            datePanel.Children.Add(new TextBlock { Text = "选择日期: ", Width = 80, VerticalAlignment = VerticalAlignment.Center });

            _datePicker = new DatePicker { Width = 200, SelectedDate = DateTime.Now };
            datePanel.Children.Add(_datePicker);
            panel.Children.Add(datePanel);

            return panel;
        }

        // 创建进度条部分
        private StackPanel CreateProgressBarSection()
        {
            var panel = new StackPanel { Margin = new Thickness(5) };

            panel.Children.Add(new TextBlock
            {
                Text = "进度条控件",
                FontSize = 14,
                FontWeight = FontWeights.SemiBold,
                Margin = new Thickness(0, 5, 0, 8)
            });

            _progressBar = new ProgressBar { Width = 300, Height = 20, Minimum = 0, Maximum = 100, Value = 30, Margin = new Thickness(5, 0, 5, 5) };
            panel.Children.Add(_progressBar);

            return panel;
        }

        // 创建按钮部分
        private StackPanel CreateButtonSection(UIApplication app)
        {
            var panel = new StackPanel { Margin = new Thickness(5) };

            panel.Children.Add(new TextBlock
            {
                Text = "按钮控件",
                FontSize = 14,
                FontWeight = FontWeights.SemiBold,
                Margin = new Thickness(0, 5, 0, 8)
            });

            var buttonPanel = new StackPanel { Orientation = Orientation.Horizontal, Margin = new Thickness(5) };

            _executeButton = new Button { Content = "执行操作", Width = 100, Height = 30, Background = Brushes.LightBlue, Margin = new Thickness(0, 0, 10, 0) };
            var cancelButton = new Button { Content = "取消", Width = 100, Height = 30, Margin = new Thickness(0, 0, 10, 0) };
            var infoButton = new Button { Content = "显示信息", Width = 100, Height = 30 };

            cancelButton.Click += (s, e) => Close();
            infoButton.Click += (s, e) => TaskDialog.Show("信息", "这是一个Revit二次开发演示窗口");

            buttonPanel.Children.Add(_executeButton);
            buttonPanel.Children.Add(cancelButton);
            buttonPanel.Children.Add(infoButton);
            panel.Children.Add(buttonPanel);

            return panel;
        }

        // 设置事件处理程序
        private void SetupEventHandlers()
        {
            _executeButton.Click += ExecuteButton_Click;
            _checkBox1.Checked += CheckBox_CheckedChanged;
            _checkBox1.Unchecked += CheckBox_CheckedChanged;
            _checkBox2.Checked += CheckBox_CheckedChanged;
            _checkBox2.Unchecked += CheckBox_CheckedChanged;
        }

        // DataGrid添加行按钮点击事件
        private void AddRowButton_Click(object sender, RoutedEventArgs e)
        {
            var currentItems = _dataGrid.ItemsSource as List<SampleData> ?? new List<SampleData>();
            var newId = currentItems.Count + 1;
            currentItems.Add(new SampleData
            {
                ID = newId,
                Name = $"新项目{newId}",
                Category = "新类别",
                Value = newId * 5.0,
                IsActive = true
            });

            _dataGrid.ItemsSource = null;
            _dataGrid.ItemsSource = currentItems;
            _statusText.Text = $"已添加新行 (ID: {newId}) - {DateTime.Now:HH:mm:ss}";
            _statusText.Foreground = Brushes.DarkBlue;
        }

        // DataGrid删除行按钮点击事件
        private void DeleteRowButton_Click(object sender, RoutedEventArgs e)
        {
            if (_dataGrid.SelectedItems.Count > 0)
            {
                var currentItems = _dataGrid.ItemsSource as List<SampleData>;
                if (currentItems != null)
                {
                    var itemsToRemove = new List<SampleData>();
                    foreach (var selectedItem in _dataGrid.SelectedItems)
                    {
                        if (selectedItem is SampleData data)
                        {
                            itemsToRemove.Add(data);
                        }
                    }

                    foreach (var item in itemsToRemove)
                    {
                        currentItems.Remove(item);
                    }

                    _dataGrid.ItemsSource = null;
                    _dataGrid.ItemsSource = currentItems;
                    _statusText.Text = $"已删除 {itemsToRemove.Count} 行 - {DateTime.Now:HH:mm:ss}";
                    _statusText.Foreground = Brushes.DarkRed;
                }
            }
            else
            {
                TaskDialog.Show("提示", "请先选择要删除的行");
            }
        }

        // DataGrid刷新按钮点击事件
        private void RefreshButton_Click(object sender, RoutedEventArgs e)
        {
            var sampleData = new List<SampleData>
            {
                new SampleData { ID = 1, Name = "项目A", Category = "类别1", Value = 10.5, IsActive = true },
                new SampleData { ID = 2, Name = "项目B", Category = "类别2", Value = 20.3, IsActive = false },
                new SampleData { ID = 3, Name = "项目C", Category = "类别1", Value = 15.7, IsActive = true },
                new SampleData { ID = 4, Name = "项目D", Category = "类别3", Value = 8.9, IsActive = true },
                new SampleData { ID = 5, Name = "项目E", Category = "类别2", Value = 25.1, IsActive = false }
            };

            _dataGrid.ItemsSource = sampleData;
            _statusText.Text = $"数据已刷新 - {DateTime.Now:HH:mm:ss}";
            _statusText.Foreground = Brushes.DarkGreen;
        }

        // 更换图像按钮点击事件
        private void ChangeImageButton_Click(object sender, RoutedEventArgs e)
        {
            // 创建一个新的彩色图像
            var colors = new[] { Brushes.LightBlue, Brushes.LightGreen, Brushes.LightYellow, Brushes.LightPink };
            var random = new Random();
            var selectedColor = colors[random.Next(colors.Length)];

            var drawingVisual = new DrawingVisual();
            using (var drawingContext = drawingVisual.RenderOpen())
            {
                drawingContext.DrawRectangle(selectedColor, null, new Rect(0, 0, 200, 150));
                drawingContext.DrawText(
                    new System.Windows.Media.FormattedText($"颜色: {selectedColor}",
                        System.Globalization.CultureInfo.CurrentCulture,
                        FlowDirection.LeftToRight,
                        new Typeface("Arial"),
                        14,
                        Brushes.DarkBlue,
                        VisualTreeHelper.GetDpi(this).PixelsPerDip),
                    new System.Windows.Point(30, 65));
            }

            var renderTarget = new RenderTargetBitmap(200, 150, 96, 96, PixelFormats.Pbgra32);
            renderTarget.Render(drawingVisual);
            _imageControl.Source = renderTarget;

            _statusText.Text = $"图像已更换 - {DateTime.Now:HH:mm:ss}";
            _statusText.Foreground = Brushes.Purple;
        }

        // 重置图像按钮点击事件
        private void ResetImageButton_Click(object sender, RoutedEventArgs e)
        {
            // 重置为原始图像
            try
            {
                var bitmap = new BitmapImage(new Uri("pack://application:,,,/System.Windows.Extensions;component/Resources/Globe.ico"));
                _imageControl.Source = bitmap;
            }
            catch
            {
                // 使用默认图像
                var drawingVisual = new DrawingVisual();
                using (var drawingContext = drawingVisual.RenderOpen())
                {
                    drawingContext.DrawRectangle(Brushes.LightBlue, null, new Rect(0, 0, 200, 150));
                    drawingContext.DrawText(
                        new System.Windows.Media. FormattedText("示例图像",
                            System.Globalization.CultureInfo.CurrentCulture,
                            FlowDirection.LeftToRight,
                            new Typeface("Arial"),
                            16,
                            Brushes.DarkBlue,
                            VisualTreeHelper.GetDpi(this).PixelsPerDip),
                        new System.Windows.Point(50, 60));
                }

                var renderTarget = new RenderTargetBitmap(200, 150, 96, 96, PixelFormats.Pbgra32);
                renderTarget.Render(drawingVisual);
                _imageControl.Source = renderTarget;
            }

            _statusText.Text = $"图像已重置 - {DateTime.Now:HH:mm:ss}";
            _statusText.Foreground = Brushes.DarkGreen;
        }

        // 执行按钮点击事件
        private void ExecuteButton_Click(object sender, RoutedEventArgs e)
        {
            // 收集所有控件的值
            var message = new System.Text.StringBuilder();
            message.AppendLine("控件值汇总:");
            message.AppendLine($"文本框: {_textBox.Text}");
            message.AppendLine($"密码框长度: {_passwordBox.Password.Length}");
            message.AppendLine($"复选框1: {_checkBox1.IsChecked}");
            message.AppendLine($"复选框2: {_checkBox2.IsChecked}");
            message.AppendLine($"单选按钮: {(_radioBtn1.IsChecked == true ? "类型A" : "类型B")}");
            message.AppendLine($"下拉列表: {_comboBox.SelectedItem}");
            message.AppendLine($"滑块值: {_slider.Value}");
            message.AppendLine($"日期选择: {_datePicker.SelectedDate?.ToShortDateString()}");

            // 处理列表框选中项
            message.AppendLine("列表框选中项:");
            foreach (var item in _listBox.SelectedItems)
            {
                message.AppendLine($"- {item}");
            }

            // 处理DataGrid选中项
            message.AppendLine("DataGrid选中项:");
            foreach (var item in _dataGrid.SelectedItems)
            {
                if (item is SampleData data)
                {
                    message.AppendLine($"- ID: {data.ID}, 名称: {data.Name}, 值: {data.Value}");
                }
            }

            // 更新进度条
            _progressBar.Value = 100;

            // 显示收集的值
            TaskDialog.Show("控件值", message.ToString());

            // 更新状态文本
            _statusText.Text = $"操作已执行 - {DateTime.Now:HH:mm:ss}";
            _statusText.Foreground = Brushes.DarkGreen;
        }

        // 复选框状态变化事件
        private void CheckBox_CheckedChanged(object sender, RoutedEventArgs e)
        {
            _statusText.Text = $"复选框状态已更改 - {DateTime.Now:HH:mm:ss}";
            _statusText.Foreground = Brushes.DarkOrange;
        }
    }
}

 

 

posted on 2025-10-30 16:05  盛书伟  阅读(4)  评论(0)    收藏  举报

导航