
<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>
<Button Grid.Row="0" Grid.Column="0" FontSize="20" FontWeight="Bold" Margin="5,0,5,0" x:Name="settings" Click="Button_Click_Settings">SettingsButton>
<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" >StartButton>
<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">
"Background" Value="White" />
"{Binding Row[状态]}" Value="PASS">
"Background" Value="Green" />
"{Binding Row[状态]}" Value="FAIL">
"Background" Value="Red" />
"{Binding Row[状态]}" Value="SKIP">
"Background" Value="Gray" />
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">
"Foreground" Value="White" />
"{Binding Status}" Value="PASS">
"Foreground" Value="Green" />
"{Binding Status}" Value="FAIL">
"Foreground" Value="Red" />
"{Binding Status}" Value="SKIP">
"Foreground" Value="Gray" />
"{Binding Status}" Value="READY">
"Foreground" Value="Black" />
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>
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 的值来设置不同的背景颜色。
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;
DataGrid 的 RowStyle使用多个 DataTrigger 为不同的状态设置不同的行背景颜色:
<DataGrid x:Name="myDataGrid" AutoGenerateColumns="True">
<DataGrid.RowStyle>
<Style TargetType="DataGridRow">
"Background" Value="White" />
"{Binding Path=Row[Status]}" Value="Green">
"Background" Value="LightGreen" />
"{Binding Path=Row[Status]}" Value="Yellow">
"Background" Value="Yellow" />
"{Binding Path=Row[Status]}" Value="Red">
"Background" Value="Salmon" />
Style>
DataGrid.RowStyle>
DataGrid>
DataTable 行状态你可以在代码中动态修改 Status 列的值来触发颜色变化:
// 将第一行的状态设置为 "Red",触发行背景变为红色
table.Rows[0]["Status"] = "Red";
Path=Row[Status]:绑定到 DataRowView 的 Row 属性中的 Status 列。DataTrigger 针对 Status 列的不同值设置不同的背景颜色。DataTrigger,为更多的状态设置不同的颜色。这样,你可以通过修改 DataTable 中的状态值,动态控制 DataGrid 中行的颜色变化。