wpf触发与模板的使用示例:批量生产工具

news2024/9/24 23:28:56

批量生产工具

在这里插入图片描述

<Window x:Class="WpfM20UpdateFW.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:WpfM20UpdateFW"
        mc:Ignorable="d"
        Title="FT_MultiUart Tool V2.7   " Height="600" Width="800" WindowState="Maximized"  Closed="Window_Closed" KeyDown="Window_KeyDown" Loaded="Window_Loaded">

    <Window.Resources>
        <RoutedUICommand x:Key="download" Text="download"/>
        <RoutedUICommand x:Key="download_concel" Text="download_concel"/>
        <RoutedUICommand x:Key="settings" Text="settings"/>
    </Window.Resources>
    <Window.InputBindings>
        <KeyBinding Gesture="Alt+D" Key="D"  Command="{StaticResource download}"></KeyBinding>
        <KeyBinding Gesture="Alt+C" Key="C"  Command="{StaticResource download_concel}"></KeyBinding>
        <KeyBinding Gesture="Alt+S" Key="S"  Command="{StaticResource settings}"></KeyBinding>

    </Window.InputBindings>
    <Window.CommandBindings>
        <CommandBinding Command="{StaticResource download}" CanExecute="Button_Click_Download"></CommandBinding>
        <CommandBinding Command="{StaticResource download_concel}" CanExecute="Button_Click_DownloadCancel"></CommandBinding>
        <CommandBinding Command="{StaticResource settings}" CanExecute="Button_Click_Settings"></CommandBinding>
    </Window.CommandBindings>

    <Grid ShowGridLines="false" MinWidth="20" FocusManager.FocusedElement="{Binding ElementName=download}" Grid.ColumnSpan="4">
        <Grid.RowDefinitions>
            <RowDefinition  Height="30"></RowDefinition>
            <RowDefinition  Height="*"></RowDefinition>

        </Grid.RowDefinitions>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="0.1*"></ColumnDefinition>
            <ColumnDefinition Width="0.1*"></ColumnDefinition>
            <ColumnDefinition Width="0.1*"></ColumnDefinition>
            <ColumnDefinition Width="0.1*"></ColumnDefinition>
        </Grid.ColumnDefinitions>
        <!--<TextBox Grid.Row="0" Grid.Column="0"  x:Name="Path" IsReadOnly="True"/>-->
        <Button Grid.Row="0" Grid.Column="0" FontSize="20" FontWeight="Bold" Margin="5,0,5,0"  x:Name="settings" Click="Button_Click_Settings">Settings</Button>
        <Button Grid.Row="0" Grid.Column="3" FontSize="20" FontWeight="Bold" Margin="50,0,5,0" x:Name="download" IsDefault="True" Click="Button_Click_Download" >Start</Button>
        <TextBlock Grid.Row="0" Grid.Column="1"  Grid.ColumnSpan="2" x:Name="textBlockDevice" FontFamily="黑体" FontSize="25" HorizontalAlignment="Center" VerticalAlignment="Center" Text="{Binding DeviceCount}"/>

        <ListBox x:Name="myListBox" Grid.Row="1" Grid.Column="0" Grid.ColumnSpan="4">
            <ListBox.ItemsPanel>
                <ItemsPanelTemplate>
                    <WrapPanel Orientation="Horizontal" IsItemsHost="True"/>
                </ItemsPanelTemplate>
            </ListBox.ItemsPanel>
            <ListBox.ItemTemplate>
                <DataTemplate>
                    <StackPanel x:Name="myStackPanel" Orientation="Vertical" Background="AliceBlue" Margin="1 0 0 0" Width="300" Height="{Binding ActualHeight, ElementName=myListBox, Mode=OneWay}">
                        <TextBlock x:Name="myCom" FontFamily="黑体" FontSize="25" HorizontalAlignment="Center" VerticalAlignment="Center">
                            <TextBlock.Text >
                                <MultiBinding StringFormat="{}COM{0,-4}">
                                    <Binding Path="Name"/>
                                </MultiBinding>
                            </TextBlock.Text>
                        </TextBlock>


                        <DataGrid x:Name="myDataGrid" AutoGenerateColumns="True"  MaxHeight="400"  ItemsSource="{Binding DataGridCollection}">
                            <DataGrid.RowStyle>
                                <Style TargetType="DataGridRow">
                                    <Setter Property="Background" Value="White" />
                                    <Style.Triggers>
                                        <!-- 这里是根据条件来设置颜色,假设你想要将满足某个条件的行背景设置为绿色 -->
                                        <DataTrigger Binding="{Binding Row[状态]}" Value="PASS">
                                            <Setter Property="Background" Value="Green" />
                                        </DataTrigger>
                                        <DataTrigger Binding="{Binding Row[状态]}" Value="FAIL">
                                            <Setter Property="Background" Value="Red" />
                                        </DataTrigger>
                                        <DataTrigger Binding="{Binding Row[状态]}" Value="SKIP">
                                            <Setter Property="Background" Value="Gray" />
                                        </DataTrigger>
                                    </Style.Triggers>
                                </Style>
                            </DataGrid.RowStyle>
                        </DataGrid>



                        <TextBlock x:Name="myStatus" Text="{Binding Path=Status}" FontFamily="黑体" FontSize="40"  FontWeight="Bold" HorizontalAlignment="Center" VerticalAlignment="Center">
                            <TextBlock.Style>
                                <Style TargetType="TextBlock">
                                    <Setter Property="Foreground" Value="White" />
                                    <Style.Triggers>
                                        <!-- 这里是根据条件来设置颜色,假设你想要将满足某个条件的行背景设置为绿色 -->
                                        <DataTrigger Binding="{Binding Status}" Value="PASS">
                                            <Setter Property="Foreground" Value="Green" />
                                        </DataTrigger>
                                        <DataTrigger Binding="{Binding Status}" Value="FAIL">
                                            <Setter Property="Foreground" Value="Red" />
                                        </DataTrigger>
                                        <DataTrigger Binding="{Binding Status}" Value="SKIP">
                                            <Setter Property="Foreground" Value="Gray" />
                                        </DataTrigger>
                                        <DataTrigger Binding="{Binding Status}" Value="READY">
                                            <Setter Property="Foreground" Value="Black" />
                                        </DataTrigger>
                                    </Style.Triggers>
                                </Style>
                            </TextBlock.Style>
                        </TextBlock>
                        <TextBox x:Name="myLog" Text="{Binding Path=Log}" MinHeight="100" VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Auto" AcceptsReturn="True" IsReadOnly="True" VerticalContentAlignment="Stretch" HorizontalContentAlignment="Stretch" />
                    </StackPanel>
                </DataTemplate>
            </ListBox.ItemTemplate>
        </ListBox>


        <!--<ListView x:Name="myListBox" Grid.Row="1" Grid.Column="0" Grid.ColumnSpan="4">
            <ListView.ItemsPanel>
                <ItemsPanelTemplate>
                    <WrapPanel Orientation="Horizontal" IsItemsHost="True"/>
                </ItemsPanelTemplate>
            </ListView.ItemsPanel>
            <ListView.ItemTemplate>
                <DataTemplate>
                    <StackPanel Orientation="Vertical" Background="AliceBlue" Margin="1 0 0 0" Width="300" Height="{Binding ActualHeight, ElementName=myListBox, Mode=OneWay}">
                        <TextBlock x:Name="textBlock" FontFamily="黑体" FontSize="25" HorizontalAlignment="Center" VerticalAlignment="Center">
                            <TextBlock.Text >
                                <MultiBinding StringFormat="{}COM{0,-4}">
                                    <Binding Path="Name"/>
                                </MultiBinding>
                            </TextBlock.Text>
                        </TextBlock>

                        <DataGrid Name="myDataGrid" AutoGenerateColumns="True"  MaxHeight="500" />

                        <TextBlock Text="{Binding Path=Status}" Foreground="{Binding Path=StatusForeground}" FontFamily="黑体" FontSize="40" HorizontalAlignment="Center" VerticalAlignment="Center"/>
                        <TextBox x:Name="logText" MinHeight="100" VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Auto" AcceptsReturn="True" IsReadOnly="True" VerticalContentAlignment="Stretch" HorizontalContentAlignment="Stretch" />
                    </StackPanel>
                </DataTemplate>
            </ListView.ItemTemplate>
            --><!-- 添加数据绑定项 --><!--
        </ListView>-->


        <!--<ListBox DockPanel.Dock="Top"  x:Name="myListBoxSP" HorizontalContentAlignment="Stretch" VerticalContentAlignment="Center">
                <ListBox.ItemTemplate>
                    <DataTemplate>
                        <Grid>
                            <ProgressBar x:Name="Progress">
                                <ProgressBar.Value>
                                    <Binding Path="ProgressValue"></Binding>
                                </ProgressBar.Value>
                                <ProgressBar.Foreground>
                                    <Binding Path="ProgressForeground"></Binding>
                                </ProgressBar.Foreground>
                            </ProgressBar>
                            <TextBlock x:Name="textBlock" FontFamily="黑体" FontSize="25" HorizontalAlignment="Center" VerticalAlignment="Center">
                                <TextBlock.Text >
                                    <MultiBinding StringFormat="{}SP  COM{0,-4}{1,4}%">
                                        <Binding Path="Name"/>
                                        <Binding Path="Value" ElementName="Progress"/>
                                    </MultiBinding>
                                </TextBlock.Text>
                            </TextBlock>

                        </Grid>
                    </DataTemplate>
                </ListBox.ItemTemplate>
            </ListBox>-->



    </Grid>
</Window>

还是不习惯数据绑定的方式,总是想用getcontrol先获取控件,再对控件进行处理。我注释后,绑定也很方便!!!

private void Window_Loaded(object sender, RoutedEventArgs e)
{
    DataTable dataTable = new DataTable();
    dataTable.Columns.Add("序号", typeof(int));
    dataTable.Columns.Add("测试项", typeof(string));
    dataTable.Columns.Add("状态", typeof(string));
    dataTable.Columns.Add("值", typeof(string));


    for (int j = 1; j <= 40; j++)
    {
            dataTable.Rows.Add(j, "读SN", j < 10?"PASS":"FAIL","FT123456789");
    }
    for (int i = 0; i < bindingList.Count; i++)
    {
        //TextBlock myCom = (TextBlock)MyAPI.getControl(myListBox, i, "myCom");

        //DataGrid myDataGrid = (DataGrid)MyAPI.getControl(myListBox, i, "myDataGrid");
        //if (myDataGrid != null)
        //{
        //    myDataGrid.ItemsSource = dataTable.DefaultView;
        //}
        bindingList[i].DataGridCollection = dataTable.DefaultView;


        //TextBlock myStatus = (TextBlock)MyAPI.getControl(myListBox, i, "myStatus");
        //myStatus.Text = "PASS";
        bool b = true;
        for (int k = 0; k < dataTable.Rows.Count; k++) {
            if (dataTable.Rows[k]["状态"].Equals("FAIL"))
            {
                b = false;
            }
        }
        bindingList[i].Status = b?"PASS":"FAIL";

        //TextBlock myLog = (TextBlock)MyAPI.getControl(myListBox, i, "myLog");
        //myLog.Text = "测试完成";

        bindingList[i].Log = "测试完成";
    }
}

触发示例:多种状态对应不同颜色

DataTrigger 可以设置多种状态,每种状态对应不同的颜色。你可以为 DataGridRow 设置多个 DataTrigger,根据不同的条件更改行的颜色。假设你有一个 Status 列,不同的状态对应不同的颜色,比如 “Green”、“Yellow”、“Red” 等。

示例:多种状态对应不同颜色

假设 DataTable 中有一个 Status 列,根据 Status 的值来设置不同的背景颜色。

1. 创建 DataTable 并绑定到 DataGrid
// 创建 DataTable
DataTable table = new DataTable();
table.Columns.Add("Name", typeof(string));
table.Columns.Add("Status", typeof(string)); // 状态列,用于改变颜色

// 添加示例数据
table.Rows.Add("Item 1", "Green");  // 对应绿色
table.Rows.Add("Item 2", "Yellow"); // 对应黄色
table.Rows.Add("Item 3", "Red");    // 对应红色

// 绑定到 DataGrid
myDataGrid.ItemsSource = table.DefaultView;
2. 在 XAML 中定义 DataGridRowStyle

使用多个 DataTrigger 为不同的状态设置不同的行背景颜色:

<DataGrid x:Name="myDataGrid" AutoGenerateColumns="True">
    <DataGrid.RowStyle>
        <Style TargetType="DataGridRow">
            <Setter Property="Background" Value="White" /> <!-- 默认背景色 -->
            <Style.Triggers>
                <!-- 当 Status 为 "Green" 时,将行背景设置为绿色 -->
                <DataTrigger Binding="{Binding Path=Row[Status]}" Value="Green">
                    <Setter Property="Background" Value="LightGreen" />
                </DataTrigger>
                <!-- 当 Status 为 "Yellow" 时,将行背景设置为黄色 -->
                <DataTrigger Binding="{Binding Path=Row[Status]}" Value="Yellow">
                    <Setter Property="Background" Value="Yellow" />
                </DataTrigger>
                <!-- 当 Status 为 "Red" 时,将行背景设置为红色 -->
                <DataTrigger Binding="{Binding Path=Row[Status]}" Value="Red">
                    <Setter Property="Background" Value="Salmon" />
                </DataTrigger>
                <!-- 你可以添加更多状态和对应的颜色 -->
            </Style.Triggers>
        </Style>
    </DataGrid.RowStyle>
</DataGrid>

3. 动态修改 DataTable 行状态

你可以在代码中动态修改 Status 列的值来触发颜色变化:

// 将第一行的状态设置为 "Red",触发行背景变为红色
table.Rows[0]["Status"] = "Red";

解释

  • Path=Row[Status]:绑定到 DataRowViewRow 属性中的 Status 列。
  • 每个 DataTrigger 针对 Status 列的不同值设置不同的背景颜色。
  • 你可以根据需要添加更多的 DataTrigger,为更多的状态设置不同的颜色。

这样,你可以通过修改 DataTable 中的状态值,动态控制 DataGrid 中行的颜色变化。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2138329.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

java项目之基于工程教育认证的计算机课程管理平台(源码+论文)

项目简介 基于工程教育认证的计算机课程管理平台的主要管理员可以管理教师&#xff0c;可以对教师信息修改删除以及查询操作&#xff1b;可以对通知公告信息进行添加&#xff0c;修改&#xff0c;删除以及查询操作&#xff1b;可以对学生信息进行添加&#xff0c;修改&#xf…

anaconda安装manim

anaconda安装manim &#xff08;安装时间2024年9月15日&#xff0c;后续版本变化再做更新&#xff09; 创建环境test 等一下我们创建一个manim项目作为试水 切换到test环境 {:height 430, :width 780} 输入以下代码 # using conda or mamba conda create -n my-manim-envi…

qt绘制时钟

代码 #include "widget.h" #include "ui_widget.h"#include <QWidget> #include <QPaintEvent> //绘图事件 #include <QDebug> //测试 #include <QPainter> //画家 #include <QPen> //笔 #include <QBrush> //画刷 …

java写s7和plc通讯

pom.xml <dependency><groupId>com.github.s7connector</groupId><artifactId>s7connector</artifactId><version>2.1</version></dependency>maven下载不了的&#xff0c;下载包&#xff0c;评论或者私自内免费给 DB212 类&a…

AI老照片修复神器,Anole下载介绍

最近AI老照片修复上色&#xff0c;再一次火出圈&#xff0c;一些社交平台关于此话题内容流量满满&#xff0c;尤其是在小红书和抖音火的不得了&#xff0c;本期文章就来给大家分享下AI修复老照片的方式方法 本文主要介绍使用Anole修复老照片的方法&#xff0c;只需输入一张黑白…

响应式CSS 媒体查询——WEB开发系列39

CSS媒体查询&#xff08;Media Queries&#xff09;是响应式设计中的核心技术之一&#xff0c;帮助我们在不同设备上展示不同的样式。通过媒体查询&#xff0c;开发者可以检测用户设备的特性&#xff0c;如屏幕宽度、高度、分辨率、方向等&#xff0c;针对性地调整网页布局。 一…

「数组」十大排序:精讲与分析(C++)

概述 截止目前&#xff0c;我们已经讲解并分析了十种最常见的排序算法&#xff0c;下附对应文章链接和全体Code。 链接 「数组」冒泡排序|选择排序|插入排序 / 及优化方案&#xff08;C&#xff09; 「数组」归并排序 / if语句优化|小区间插入优化&#xff08;C&#xff09…

使用Jlink给AT32下载程序

点击下载之后选择target device&#xff0c;这里我使用的是AT32F403ACGT7&#xff0c;M4内核&#xff0c;就选择Cortex-M4. 如果已经选过了&#xff0c;但不知道选没选对&#xff0c;就把ini文件删除即可再次进行选择。 我这里使用SW接线方式&#xff0c;选好后立马识别出来了…

Java【集合】

一、集合的概述 集合建立在数组基础上&#xff0c;主要位于java.util包中&#xff0c;用来存储Java类对象&#xff0c;并且可以实现各种数据结构。 集合大小可以改变&#xff0c;可以存放不同数据类型数据。集合不能存放基本类型数据&#xff0c;只能存放引用数据类型数据。集…

浅谈树型结构——树

文章目录 一、什么是树&#xff1f;二、树的特点三、树的概念四、树的表示形式五、树的应用 一、什么是树&#xff1f; 树是一种 非线性 的数据结构&#xff0c;是树型结构。是一个由n个有限结点组成的一个具有层次关系的集合&#xff0c;这种集合因为看起来像一颗倒挂的树&am…

测试-Gatling 与性能测试

Gatling 与性能测试详解 一、什么是性能测试&#xff1f; 性能测试是一种软件测试类型&#xff0c;旨在评估系统在负载下的响应时间、吞吐量和资源利用率等性能指标。通过性能测试&#xff0c;开发者和运维团队能够识别出系统的瓶颈、优化系统性能&#xff0c;并确保其在实际…

鸿蒙之Hello Word 遇坑总结 mac系统 不能预览 提示 Only files in a module can be previewed 解决办法

顺时代&#xff0c; 应潮流 &#xff01;鸿蒙崛起不可阻挡&#xff0c; 鸿蒙开发大有可为&#xff0c; 万丈高楼平地起&#xff0c;学编程的第一步当然是Hello World起&#xff0c;请看 第一步是下载 编辑器&#xff0c;直接官网 文档中心下载对应的系统版本安装&#xff0c;…

用nginx-rtmp-win32-master及ffmpeg模拟rtmp视频流

效果 使用nginx-rtmp-win32-master搭建RTMP服务 双击exe就可以了。切记整个目录不能有中文 README.md ,启用后本地的RTM路径: rtmp://192.168.1.186/live/xxx ffmpeg将地本地视频推RMTP F:\rtsp\ffmpeg-7.0.2-essentials_build\bin>ffmpeg -re -i F:\rtsp\123.mp4 -c c…

Java设计模式—面向对象设计原则(六) ----->合成复用原则(CRP) (完整详解,附有代码+案例)

文章目录 3.6 合成复用原则(CRP)3.6.1 概述3.6.2 案列 3.6 合成复用原则(CRP) 合成复用原则(CRP)&#xff1a;Composite Reuse Principle&#xff0c;CRP 又叫&#xff1a; 组合/聚合复用原则&#xff08;Composition/Aggregate Reuse Principle&#xff0c;CARP&#xff09;…

FastAPI 应用安全加固:HTTPSRedirectMiddleware 中间件全解析

在当今的网络环境中&#xff0c;数据安全变得越来越重要。HTTPS 作为一种安全协议&#xff0c;它通过加密传输数据来保护用户信息免受窃取和篡改。在 FastAPI 应用中&#xff0c;确保所有的 HTTP 请求都通过 HTTPS 进行是至关重要的。 中间件在 FastAPI 中用于处理请求前后的…

探索 Electron:助力文档操作应用快速落地

Electron是一个开源的桌面应用程序开发框架&#xff0c;它允许开发者使用Web技术&#xff08;如 HTML、CSS 和 JavaScript&#xff09;构建跨平台的桌面应用程序&#xff0c;它的出现极大地简化了桌面应用程序的开发流程&#xff0c;让更多的开发者能够利用已有的 Web 开发技能…

智慧农业数据集(一)

目录 葡萄叶片病虫害害数据集 茄子果实病虫害数据集 81类水果数据集 小麦叶片病虫害数据集 番茄叶片病害数据集 草莓叶片病虫害数据集 水稻叶片病虫害数据集 菠萝成熟度数据集 10类水果数据集 葡萄叶片病虫害害数据集 数据集下载链接&#xff1a;葡萄叶片病虫害数据集…

几分钟学会搭建一个自己的外卖霸王餐系统

大家好&#xff0c;我是鲸天科技千千&#xff0c;大家都知道我是做小程序开发的&#xff0c;平时会给大家分享一些互联网相关的创业项目&#xff0c;感兴趣的可以跟我关注一下。 搭建一个首先就是要搭建一个自己的霸王餐小程序&#xff0c;我们自己的工作就是把这个小程序推广…

H5 CSS布局样式定位position

1. H5 H5 CSS布局样式定位position 布局是html中非常重要的一部分&#xff0c;而定位在页面布局中也是使用频率很高的方法&#xff0c;本章节为定位在布局中的使用技巧和注意事项。   position定位有4个属性&#xff0c;分别是static(默认&#xff09;&#xff0c;absolute&a…

6芯7芯可旋转电连接器航空插头

概述 可旋转电航空插头是一种能够在旋转或相对运动的部件间稳定传输电气信号或电源的装置&#xff0c;广泛应用于航空航天、自动化设备、医疗设备等多个领域。它的核心在于精密的接触系统&#xff0c;由旋转端和固定端两部分组成&#xff0c;通过金属触点或导电环实现电气连接。…