From e57938fbda9bff702004038f76d009422968bff5 Mon Sep 17 00:00:00 2001
From: alielie <alielie@git.com>
Date: 星期五, 06 十一月 2026 18:05:07 +0800
Subject: [PATCH] 提交代码

---
 DeviceService/MainWindow.xaml |  181 +++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 181 insertions(+), 0 deletions(-)

diff --git a/DeviceService/MainWindow.xaml b/DeviceService/MainWindow.xaml
new file mode 100644
index 0000000..aeaa9f2
--- /dev/null
+++ b/DeviceService/MainWindow.xaml
@@ -0,0 +1,181 @@
+<Window x:Class="DeviceService.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:DeviceService"
+        xmlns:service="clr-namespace:DeviceService.Service"
+        mc:Ignorable="d"
+        Title="璁惧鏈嶅姟" Height="560" Width="960"
+        Background="{StaticResource PageBackgroundBrush}">
+    <Grid Margin="12">
+        <Grid.ColumnDefinitions>
+            <ColumnDefinition Width="250" />
+            <ColumnDefinition Width="*" />
+        </Grid.ColumnDefinitions>
+
+        <!-- 宸︿晶锛氭寜 Type 鍒嗙粍鐨勮澶囨爲 -->
+        <Border Grid.Column="0" Style="{StaticResource CardBorder}" Margin="0,0,10,0">
+            <DockPanel Margin="4">
+                <TextBlock DockPanel.Dock="Top"
+                           Style="{StaticResource TitleText}"
+                           Text="璁惧鍒楄〃"
+                           Margin="6,2,0,10" />
+                <TreeView x:Name="DeviceTree"
+                          Background="Transparent"
+                          BorderThickness="0"
+                          ItemContainerStyle="{StaticResource DeviceTreeViewItem}"
+                          SelectedItemChanged="DeviceTree_SelectedItemChanged">
+                    <TreeView.Resources>
+                        <HierarchicalDataTemplate DataType="{x:Type local:DeviceGroupNode}"
+                                                  ItemsSource="{Binding Children}">
+                            <StackPanel Orientation="Horizontal">
+                                <Border Background="{StaticResource AccentFaintBrush}"
+                                        CornerRadius="4"
+                                        Padding="5,1"
+                                        Margin="0,0,6,0">
+                                    <TextBlock Text="{Binding Type}"
+                                               FontSize="11"
+                                               FontWeight="Bold"
+                                               Foreground="{StaticResource AccentPressedBrush}" />
+                                </Border>
+                            </StackPanel>
+                        </HierarchicalDataTemplate>
+                        <DataTemplate DataType="{x:Type local:DeviceNode}">
+                            <TextBlock Text="{Binding DisplayName}" TextTrimming="CharacterEllipsis" />
+                        </DataTemplate>
+                    </TreeView.Resources>
+                </TreeView>
+            </DockPanel>
+        </Border>
+
+        <!-- 鍙充晶锛氬伐鍏锋爮 + 璁惧閰嶇疆鍖哄煙 -->
+        <Grid Grid.Column="1">
+            <Grid.RowDefinitions>
+                <RowDefinition Height="Auto" />
+                <RowDefinition Height="*" />
+            </Grid.RowDefinitions>
+
+            <DockPanel Grid.Row="0" Margin="0,0,0,10">
+                <StackPanel Orientation="Horizontal" DockPanel.Dock="Right" VerticalAlignment="Center">
+                    <!-- 鏈嶅姟鐘舵�佸窘鏍囷細缁戝畾鍏ㄥ眬鐘舵�佹満 ServiceStateMachine.GlobalState.State -->
+                    <Border x:Name="ServiceStateBadge"
+                            CornerRadius="12"
+                            Padding="12,5"
+                            Margin="0,0,12,0"
+                            VerticalAlignment="Center">
+                        <Border.Style>
+                            <Style TargetType="Border">
+                                <Setter Property="Background" Value="#F3F4F6" />
+                                <Style.Triggers>
+                                    <DataTrigger Binding="{Binding State, Source={x:Static service:ServiceStateMachine.GlobalState}}"
+                                                 Value="Running">
+                                        <Setter Property="Background" Value="#D1FAE5" />
+                                    </DataTrigger>
+                                    <DataTrigger Binding="{Binding State, Source={x:Static service:ServiceStateMachine.GlobalState}}"
+                                                 Value="Error">
+                                        <Setter Property="Background" Value="#FEE2E2" />
+                                    </DataTrigger>
+                                </Style.Triggers>
+                            </Style>
+                        </Border.Style>
+                        <TextBlock x:Name="ServiceStateText" FontSize="12.5" FontWeight="SemiBold">
+                            <TextBlock.Style>
+                                <Style TargetType="TextBlock">
+                                    <Setter Property="Text" Value="鏈惎鍔�" />
+                                    <Setter Property="Foreground" Value="{StaticResource TextSecondaryBrush}" />
+                                    <Style.Triggers>
+                                        <DataTrigger Binding="{Binding State, Source={x:Static service:ServiceStateMachine.GlobalState}}"
+                                                     Value="Running">
+                                            <Setter Property="Text" Value="杩愯涓�" />
+                                            <Setter Property="Foreground" Value="#047857" />
+                                        </DataTrigger>
+                                        <DataTrigger Binding="{Binding State, Source={x:Static service:ServiceStateMachine.GlobalState}}"
+                                                     Value="Error">
+                                            <Setter Property="Text" Value="寮傚父" />
+                                            <Setter Property="Foreground" Value="#B91C1C" />
+                                        </DataTrigger>
+                                    </Style.Triggers>
+                                </Style>
+                            </TextBlock.Style>
+                        </TextBlock>
+                    </Border>
+
+                    <!-- 鍚姩/鍋滄锛歊unning 鏃舵枃妗堝彉涓衡�滃仠姝⑩�濓紝鐐瑰嚮璧板仠姝㈤�昏緫 -->
+                    <Button x:Name="StartServiceBtn"
+                            MinWidth="92"
+                            Click="StartService_Click">
+                        <Button.Style>
+                            <Style TargetType="Button" BasedOn="{StaticResource PrimaryButton}">
+                                <Setter Property="Content" Value="鍚姩" />
+                                <Style.Triggers>
+                                    <DataTrigger Binding="{Binding State, Source={x:Static service:ServiceStateMachine.GlobalState}}"
+                                                 Value="Running">
+                                        <Setter Property="Content" Value="鍋滄" />
+                                        <Setter Property="Background" Value="#B91C1C" />
+                                    </DataTrigger>
+                                </Style.Triggers>
+                            </Style>
+                        </Button.Style>
+                    </Button>
+
+                    <!-- 娣诲姞璁惧锛氭湇鍔¤繍琛屼腑绂佹鎿嶄綔 -->
+                    <Button x:Name="AddDeviceButton"
+                            MinWidth="92"
+                            Margin="8,0,0,0"
+                            Content="娣诲姞璁惧"
+                            Click="AddDeviceButton_Click">
+                        <Button.Style>
+                            <Style TargetType="Button" BasedOn="{StaticResource PrimaryButton}">
+                                <Style.Triggers>
+                                    <DataTrigger Binding="{Binding State, Source={x:Static service:ServiceStateMachine.GlobalState}}"
+                                                 Value="Running">
+                                        <Setter Property="IsEnabled" Value="False" />
+                                    </DataTrigger>
+                                </Style.Triggers>
+                            </Style>
+                        </Button.Style>
+                    </Button>
+
+                    <!-- 鍒锋柊锛氭湇鍔¤繍琛屼腑绂佹鎿嶄綔 -->
+                    <Button x:Name="RefreshButton"
+                            MinWidth="72"
+                            Margin="8,0,0,0"
+                            Content="鍒锋柊"
+                            Click="RefreshButton_Click">
+                        <Button.Style>
+                            <Style TargetType="Button" BasedOn="{StaticResource SecondaryButton}">
+                                <Style.Triggers>
+                                    <DataTrigger Binding="{Binding State, Source={x:Static service:ServiceStateMachine.GlobalState}}"
+                                                 Value="Running">
+                                        <Setter Property="IsEnabled" Value="False" />
+                                    </DataTrigger>
+                                </Style.Triggers>
+                            </Style>
+                        </Button.Style>
+                    </Button>
+                    <Button x:Name="DebugWindowButton"
+                            Style="{StaticResource SecondaryButton}"
+                            MinWidth="92"
+                            Margin="8,0,0,0"
+                            Content="璋冭瘯绐楀彛"
+                            Click="DebugWindowButton_Click" />
+                    <Button x:Name="LogWindowButton"
+                            Style="{StaticResource SecondaryButton}"
+                            MinWidth="72"
+                            Margin="8,0,0,0"
+                            Content="鏃ュ織"
+                            Click="LogWindowButton_Click" />
+                </StackPanel>
+                <TextBlock x:Name="HeaderText"
+                           Style="{StaticResource SectionText}"
+                           Text="璁惧閰嶇疆"
+                           VerticalAlignment="Center" />
+            </DockPanel>
+
+            <Border Grid.Row="1" Style="{StaticResource CardBorder}">
+                <ContentControl x:Name="ConfigHost" Margin="4" Focusable="False" />
+            </Border>
+        </Grid>
+    </Grid>
+</Window>

--
Gitblit v1.9.1