From 0940f31b7eba1cf6b6a8c1fca72d97cf686e79f2 Mon Sep 17 00:00:00 2001
From: alielie <alielie@git.com>
Date: 星期五, 04 七月 2025 10:43:00 +0800
Subject: [PATCH] 优化插件,完善TreeListView

---
 HMI.IOMonitor/IOMonitor.xaml |  302 ++++++++++++++++++++++++++++++++-----------------
 1 files changed, 196 insertions(+), 106 deletions(-)

diff --git a/HMI.IOMonitor/IOMonitor.xaml b/HMI.IOMonitor/IOMonitor.xaml
index 26a0da3..5980e34 100644
--- a/HMI.IOMonitor/IOMonitor.xaml
+++ b/HMI.IOMonitor/IOMonitor.xaml
@@ -9,118 +9,208 @@
              xmlns:ui="clr-namespace:HMI.UI;assembly=HMI.UI"
              xmlns:pw="https://opensource.panuon.com/wpf"
              xmlns:pu="https://opensource.panuon.com/wpf-ui"
-             xmlns:dp="clr-namespace:HMI.UI;assembly=HMI.UI"
-             mc:Ignorable="d" 
-             Padding="10"
+             xmlns:dp="clr-namespace:HMI.UI.DpUtil;assembly=HMI.UI"
+             mc:Ignorable="d"
              Loaded="UserControl_Loaded"
              Background="{StaticResource WorkspaceBackground}"
              d:DesignHeight="450" d:DesignWidth="800">
-    <Grid>
-        <Grid.ColumnDefinitions>
-            <ColumnDefinition Width="5*"/>
-            <ColumnDefinition Width="5*"/>
-        </Grid.ColumnDefinitions>
 
-        <Border Style="{StaticResource CardBoarder}" Margin="0,0,2,0">
-            <StackPanel>
-                <DockPanel Margin="0,0,0,10">
-                    <Button DockPanel.Dock="Right" pu:ButtonHelper.Icon="&#xe934;" Style="{StaticResource DangerButton}">鍒犻櫎</Button>
-                    <Button DockPanel.Dock="Right" Style="{StaticResource PrimaryButton}" 
-pu:IconHelper.FontFamily="{StaticResource iconfont}"
-pu:ButtonHelper.Icon="&#xe631;" Margin="0,0,10,0" x:Name="refreshBtn" Click="Button_Click">鍒锋柊</Button>
-                    <Button DockPanel.Dock="Right" Style="{StaticResource PrimaryButton}" 
-            pu:IconHelper.FontFamily="{StaticResource iconfont}"
-            pu:ButtonHelper.Icon="&#xe61a;" Margin="0,0,10,0" x:Name="addBtn" Click="Button_Click">鏂板</Button>
-                    <TextBlock DockPanel.Dock="Left" FontSize="{StaticResource TitleFontSize}" 
-                           VerticalAlignment="Center" HorizontalAlignment="Left" Text="鑿滃崟鍒楄〃"/>
-                </DockPanel>
+    <UserControl.Resources>
+        <Style TargetType="Label">
+            <Setter Property="VerticalContentAlignment" Value="Center"/>
+            <Setter Property="VerticalAlignment" Value="Center"/>
+        </Style>
+        <CollectionViewSource x:Key="disFilter" Source="{Binding Dis}" Filter="CollectionViewSource_Filter"/>
+        <CollectionViewSource x:Key="dosFilter" Source="{Binding Dos}" Filter="CollectionViewSource_Filter"/>
+    </UserControl.Resources>
 
-                <DataGrid Grid.Column="1" x:Name="diTable" Style="{StaticResource DefaultDataGrid}" ItemsSource="{Binding DataSource}">
-                    <DataGrid.Columns>
-                        <DataGridTemplateColumn Header="" Width="Auto" CanUserResize="False">
-                            <DataGridTemplateColumn.CellTemplate>
-                                <DataTemplate>
-                                    <CheckBox VerticalAlignment="Center" IsChecked="{Binding Selected,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"/>
-                                </DataTemplate>
-                            </DataGridTemplateColumn.CellTemplate>
-                        </DataGridTemplateColumn>
-                        <DataGridTemplateColumn Header="#" CanUserResize="False">
-                            <DataGridTemplateColumn.CellTemplate>
-                                <DataTemplate>
-                                    <TextBlock Text="{Binding Converter={StaticResource rowNumber},
-                    RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type DataGridRow},AncestorLevel=1}}"/>
-                                </DataTemplate>
-                            </DataGridTemplateColumn.CellTemplate>
-                        </DataGridTemplateColumn>
-                        <DataGridTextColumn Width="*" Binding="{Binding Code}" Header="缂栧彿" />
-                        <DataGridTextColumn Width="*" Binding="{Binding Name}" Header="鍚嶇О" />
-                        <DataGridTextColumn Width="*" Binding="{Binding Type}" Header="绫诲瀷" />
-                        <DataGridTextColumn Width="*" Binding="{Binding Value}" Header="DI鍊�" />
-                        <DataGridTemplateColumn Header="鎿嶄綔" Width="100" IsReadOnly="True" CanUserResize="False">
-                            <DataGridTemplateColumn.CellTemplate>
-                                <DataTemplate>
-                                    <StackPanel Orientation="Horizontal">
-                                        <Button x:Name="editBtn" Style="{StaticResource RowLink}" 
-                            Margin="0,0,10,0" 
-                            Click="Button_Click"
-                            DataContext="{Binding }">缂栬緫</Button>
-                                        <Button x:Name="delBtn" Style="{StaticResource DangerLinkButton}" 
-                            DataContext="{Binding }"
-                            Click="Button_Click">鍒犻櫎</Button>
-                                    </StackPanel>
-                                </DataTemplate>
-                            </DataGridTemplateColumn.CellTemplate>
-                        </DataGridTemplateColumn>
-                    </DataGrid.Columns>
-                </DataGrid>
-            </StackPanel>
-        </Border>
+    <Border Grid.Row="1" Style="{StaticResource CardBoarder}">
+        <Grid dp:GridHelper.Space="10">
+            <Grid.RowDefinitions>
+                <RowDefinition Height="Auto"/>
+                <RowDefinition/>
+            </Grid.RowDefinitions>
 
-        <Border Grid.Column="1" Style="{StaticResource CardBoarder}" Margin="2,0,0,0">
-            <StackPanel>
-                <DockPanel Margin="0,0,0,10" >
-                    <TextBlock DockPanel.Dock="Left" FontSize="{StaticResource TitleFontSize}" 
-                   VerticalAlignment="Center" HorizontalAlignment="Left" Text="鑿滃崟缁撴瀯"/>
-                </DockPanel>
+            <Grid.ColumnDefinitions>
+                <ColumnDefinition Width="5*"/>
+                <ColumnDefinition Width="5*"/>
+            </Grid.ColumnDefinitions>
 
-                <DataGrid Grid.Column="1" x:Name="doTable" Style="{StaticResource DefaultDataGrid}" ItemsSource="{Binding DataSource}">
-                    <DataGrid.Columns>
-                        <DataGridTemplateColumn Header="" Width="Auto" CanUserResize="False">
-                            <DataGridTemplateColumn.CellTemplate>
-                                <DataTemplate>
-                                    <CheckBox VerticalAlignment="Center" IsChecked="{Binding Selected,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"/>
-                                </DataTemplate>
-                            </DataGridTemplateColumn.CellTemplate>
-                        </DataGridTemplateColumn>
-                        <DataGridTemplateColumn Header="#" CanUserResize="False">
-                            <DataGridTemplateColumn.CellTemplate>
-                                <DataTemplate>
-                                    <TextBlock Text="{Binding Converter={StaticResource rowNumber},
+            <DockPanel Grid.Row="0" Grid.ColumnSpan="2">
+                <StackPanel DockPanel.Dock="Right" Style="{StaticResource ButtonGroup}">
+                    <Button Style="{StaticResource AddBtn}" x:Name="addBtn" Click="Button_Click"/>
+                    <Button Style="{StaticResource ImportBtn}" x:Name="importBtn" Click="Button_Click"/>
+                </StackPanel>
+
+                <TextBlock DockPanel.Dock="Left" VerticalAlignment="Center" 
+                       FontSize="{StaticResource TitleFontSize}" Text="{DynamicResource DIO.Title}"/>
+            </DockPanel>
+
+            <Border Grid.Row="1" Style="{StaticResource CardBoarder}" Padding="0">
+                <Grid dp:GridHelper.Space="10">
+                    <Grid.ColumnDefinitions>
+                        <ColumnDefinition Width="Auto"/>
+                        <ColumnDefinition />
+                        <ColumnDefinition Width="Auto"/>
+                        <ColumnDefinition Width="Auto"/>
+                    </Grid.ColumnDefinitions>
+                    <Grid.RowDefinitions>
+                        <RowDefinition Height="Auto"/>
+                        <RowDefinition Height="Auto"/>
+                        <RowDefinition Height="Auto"/>
+                        <RowDefinition/>
+                    </Grid.RowDefinitions>
+
+                    <Label Grid.Row="0" Grid.Column="0" Content="{DynamicResource DIO.di.Name}"
+                       FontSize="{StaticResource ContentFontSize}"/>
+                    <ComboBox Grid.Row="0" Grid.Column="1" x:Name="diName" 
+                          IsEditable="True" Style="{StaticResource FormComboxStyle}"/>
+
+                    <Button Style="{StaticResource PrimaryButton}" Grid.Row="0" Grid.Column="2" 
+                        x:Name="diSelect" Click="Button_Click"
+                        Content="{DynamicResource DIO.di.Query}"/>
+                    <Button Style="{StaticResource PrimaryButton}" Grid.Row="0" Grid.Column="3"
+                        x:Name="diReset" Click="Button_Click"
+                            Content="{DynamicResource DIO.di.Reset}"/>
+
+                    <Label Grid.Row="1" Grid.Column="0" Content="{DynamicResource DIO.di.Code}"
+       FontSize="{StaticResource ContentFontSize}"/>
+                    <ComboBox Grid.Row="1" Grid.Column="1" x:Name="diCode" 
+                          IsEditable="True"
+                          Style="{StaticResource FormComboxStyle}"/>
+
+                    <Label Grid.Row="2" Grid.Column="0" Content="{DynamicResource DIO.di.Group}"
+       FontSize="{StaticResource ContentFontSize}"/>
+                    <ComboBox Grid.Row="2" Grid.Column="1" x:Name="diGroup" 
+                          IsEditable="True" Style="{StaticResource FormComboxStyle}"/>
+
+                    <DataGrid Grid.Row="3" Grid.ColumnSpan="4" x:Name="diTable" Style="{StaticResource DefaultDataGrid}" 
+                          ItemsSource="{Binding Source={StaticResource disFilter}}">
+
+                        <DataGrid.RowStyle>
+                            <Style TargetType="DataGridRow" BasedOn="{StaticResource {x:Static pu:StyleKeys.DataGridRowStyle}}">
+                                <Style.Triggers>
+                                    <DataTrigger Binding="{Binding Value}" Value="True">
+                                        <Setter Property="Background" Value="{StaticResource DangerColor}"/>
+                                        <Setter Property="Foreground" Value="{StaticResource DangerColorContrast}"/>
+                                    </DataTrigger>
+                                </Style.Triggers>
+                            </Style>
+                        </DataGrid.RowStyle>
+                        <DataGrid.Columns>
+                            <DataGridTemplateColumn Header="#" CanUserResize="False">
+                                <DataGridTemplateColumn.CellTemplate>
+                                    <DataTemplate>
+                                        <TextBlock Text="{Binding Converter={StaticResource rowNumber},
     RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type DataGridRow},AncestorLevel=1}}"/>
-                                </DataTemplate>
-                            </DataGridTemplateColumn.CellTemplate>
-                        </DataGridTemplateColumn>
-                        <DataGridTextColumn Width="*" Binding="{Binding Code}" Header="缂栧彿"/>
-                        <DataGridTextColumn Width="*" Binding="{Binding Name}" Header="鍚嶇О" />
-                        <DataGridTextColumn Width="*" Binding="{Binding Type}" Header="绫诲瀷" />
-                        <DataGridTextColumn Width="*" Binding="{Binding Value}" Header="DO鍊�" />
-                        <DataGridTemplateColumn Header="鎿嶄綔" Width="100" IsReadOnly="True" CanUserResize="False">
-                            <DataGridTemplateColumn.CellTemplate>
-                                <DataTemplate>
-                                    <StackPanel Orientation="Horizontal" ui:StackPanelHelper.ChildSpace="10">
-                                        <Button x:Name="editBtn" Style="{StaticResource RowLink}"
-            Click="Button_Click"
-            DataContext="{Binding }">缂栬緫</Button>
-                                        <Button x:Name="delBtn" Style="{StaticResource DangerLinkButton}" 
-            DataContext="{Binding }"
-            Click="Button_Click">鍒犻櫎</Button>
-                                    </StackPanel>
-                                </DataTemplate>
-                            </DataGridTemplateColumn.CellTemplate>
-                        </DataGridTemplateColumn>
-                    </DataGrid.Columns>
-                </DataGrid>
-            </StackPanel>
-        </Border>
-    </Grid>
+                                    </DataTemplate>
+                                </DataGridTemplateColumn.CellTemplate>
+                            </DataGridTemplateColumn>
+                            <DataGridTextColumn Width="*" Binding="{Binding Code}">
+                                <DataGridTextColumn.Header>
+                                    <TextBlock Text="{DynamicResource DIO.Code}"/>
+                                </DataGridTextColumn.Header>
+                            </DataGridTextColumn>
+                            <DataGridTextColumn Width="*" Binding="{Binding Name}">
+                                <DataGridTextColumn.Header>
+                                    <TextBlock Text="{DynamicResource DIO.Name}"/>
+                                </DataGridTextColumn.Header>
+                            </DataGridTextColumn>
+                            <DataGridTextColumn Width="*" Binding="{Binding Type}">
+                                <DataGridTextColumn.Header>
+                                    <TextBlock Text="{DynamicResource DIO.Type}"/>
+                                </DataGridTextColumn.Header>
+                            </DataGridTextColumn>
+                            <DataGridTextColumn Width="*" Binding="{Binding Value}">
+                                <DataGridTextColumn.Header>
+                                    <TextBlock Text="{DynamicResource DIO.di.Value}"/>
+                                </DataGridTextColumn.Header>
+                            </DataGridTextColumn>
+                        </DataGrid.Columns>
+                    </DataGrid>
+                </Grid>
+            </Border>
+
+            <Border Grid.Row="1" Grid.Column="1" Style="{StaticResource CardBoarder}" Padding="0">
+                <Grid dp:GridHelper.Space="10">
+                    <Grid.ColumnDefinitions>
+                        <ColumnDefinition Width="Auto"/>
+                        <ColumnDefinition />
+                        <ColumnDefinition Width="Auto"/>
+                        <ColumnDefinition Width="Auto"/>
+                    </Grid.ColumnDefinitions>
+                    <Grid.RowDefinitions>
+                        <RowDefinition Height="Auto"/>
+                        <RowDefinition Height="Auto"/>
+                        <RowDefinition Height="Auto"/>
+                        <RowDefinition/>
+                    </Grid.RowDefinitions>
+
+                    <Label Grid.Row="0" Grid.Column="0" Content="{DynamicResource DIO.do.Name}"
+                   FontSize="{StaticResource ContentFontSize}"/>
+                    <ComboBox Grid.Row="0" Grid.Column="1" x:Name="doName"
+                          IsEditable="True" Style="{StaticResource FormComboxStyle}"/>
+
+                    <Button Style="{StaticResource PrimaryButton}" Grid.Row="0" Grid.Column="2"
+                        x:Name="doSelect" Click="Button_Click" Content="{DynamicResource DIO.do.Query}"/>
+                    <Button Style="{StaticResource PrimaryButton}" Grid.Row="0" Grid.Column="3"
+                        x:Name="doReset" Click="Button_Click" Content="{DynamicResource DIO.do.Reset}"/>
+
+                    <Label Grid.Row="1" Grid.Column="0" Content="{DynamicResource DIO.do.Code}"
+   FontSize="{StaticResource ContentFontSize}"/>
+                    <ComboBox Grid.Row="1" Grid.Column="1" x:Name="doCode"
+                          IsEditable="True" Style="{StaticResource FormComboxStyle}"/>
+
+                    <Label Grid.Row="2" Grid.Column="0" Content="{DynamicResource DIO.do.Group}"
+   FontSize="{StaticResource ContentFontSize}"/>
+                    <ComboBox Grid.Row="2" Grid.Column="1" x:Name="doGroup"
+                          IsEditable="True" Style="{StaticResource FormComboxStyle}"/>
+
+                    <DataGrid Grid.Row="3" Grid.ColumnSpan="4" x:Name="doTable" Style="{StaticResource DefaultDataGrid}" 
+                      ItemsSource="{Binding Source={StaticResource dosFilter}}">
+                        <DataGrid.RowStyle>
+                            <Style TargetType="DataGridRow" BasedOn="{StaticResource {x:Static pu:StyleKeys.DataGridRowStyle}}">
+                                <Style.Triggers>
+                                    <DataTrigger Binding="{Binding Value}" Value="True">
+                                        <Setter Property="Background" Value="{StaticResource DangerColor}"/>
+                                        <Setter Property="Foreground" Value="{StaticResource DangerColorContrast}"/>
+                                    </DataTrigger>
+                                </Style.Triggers>
+                            </Style>
+                        </DataGrid.RowStyle>
+                        <DataGrid.Columns>
+                            <DataGridTemplateColumn Header="#" CanUserResize="False">
+                                <DataGridTemplateColumn.CellTemplate>
+                                    <DataTemplate>
+                                        <TextBlock Text="{Binding Converter={StaticResource rowNumber},
+RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type DataGridRow},AncestorLevel=1}}"/>
+                                    </DataTemplate>
+                                </DataGridTemplateColumn.CellTemplate>
+                            </DataGridTemplateColumn>
+                            <DataGridTextColumn Width="*" Binding="{Binding Code}">
+                                <DataGridTextColumn.Header>
+                                    <TextBlock Text="{DynamicResource DIO.Code}"/>
+                                </DataGridTextColumn.Header>
+                            </DataGridTextColumn>
+                            <DataGridTextColumn Width="*" Binding="{Binding Name}">
+                                <DataGridTextColumn.Header>
+                                    <TextBlock Text="{DynamicResource DIO.Name}"/>
+                                </DataGridTextColumn.Header>
+                            </DataGridTextColumn>
+                            <DataGridTextColumn Width="*" Binding="{Binding Type}">
+                                <DataGridTextColumn.Header>
+                                    <TextBlock Text="{DynamicResource DIO.Type}"/>
+                                </DataGridTextColumn.Header>
+                            </DataGridTextColumn>
+                            <DataGridTextColumn Width="*" Binding="{Binding Value}">
+                                <DataGridTextColumn.Header>
+                                    <TextBlock Text="{DynamicResource DIO.do.Value}"/>
+                                </DataGridTextColumn.Header>
+                            </DataGridTextColumn>
+                        </DataGrid.Columns>
+                    </DataGrid>
+                </Grid>
+            </Border>
+        </Grid>
+    </Border>
 </hb:PluginControl>
\ No newline at end of file

--
Gitblit v1.9.1