- DB720Flasher: WPF .NET 9 GUI 플래셔 - 멀티모델 프로파일(flash.json + 빌트인 DB720/DB402S/DB400S/DB400Q/DB300eM) - 포트 자동감지(JTAG 우선, 유령 포트 자동 회피), esptool v5 동봉 - flash_app.ps1 / flash_full.ps1 / list_ports.ps1: 기존 PowerShell 키트 - profiles/: 모델별 flash.json 템플릿 - firmware/flash.json: DB720 모델 설정 (서명 실펌웨어 .bin 은 repo 제외) Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
371 lines
17 KiB
XML
371 lines
17 KiB
XML
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
|
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
|
xmlns:sys="clr-namespace:System;assembly=mscorlib">
|
|
|
|
<!-- ===== 디자인 토큰 (전역 규칙: 컨트롤 높이 통일, 인라인 Padding 금지) ===== -->
|
|
<sys:Double x:Key="Control.Height">34</sys:Double>
|
|
<CornerRadius x:Key="Control.Radius">6</CornerRadius>
|
|
|
|
<!-- 색 (다크) -->
|
|
<SolidColorBrush x:Key="Bg" Color="#FF1E1F22" />
|
|
<SolidColorBrush x:Key="Surface" Color="#FF2A2C30" />
|
|
<SolidColorBrush x:Key="SurfaceAlt" Color="#FF34373C" />
|
|
<SolidColorBrush x:Key="Border" Color="#FF44474D" />
|
|
<SolidColorBrush x:Key="Text" Color="#FFECECEC" />
|
|
<SolidColorBrush x:Key="TextSubtle" Color="#FF9AA0A6" />
|
|
<SolidColorBrush x:Key="Accent" Color="#FF3B82F6" />
|
|
<SolidColorBrush x:Key="AccentHover" Color="#FF60A5FA" />
|
|
<SolidColorBrush x:Key="Success" Color="#FF34D399" />
|
|
<SolidColorBrush x:Key="Warn" Color="#FFF59E0B" />
|
|
<SolidColorBrush x:Key="Danger" Color="#FFEF4444" />
|
|
<SolidColorBrush x:Key="DangerDim" Color="#33EF4444" />
|
|
<SolidColorBrush x:Key="SuccessDim" Color="#2234D399" />
|
|
<SolidColorBrush x:Key="PopupBg" Color="#FF313338" />
|
|
|
|
<!-- ===== Button: 전역 스타일만, 인라인 Padding 금지 ===== -->
|
|
<Style TargetType="Button">
|
|
<Setter Property="MinHeight" Value="{StaticResource Control.Height}" />
|
|
<Setter Property="Padding" Value="14,0" />
|
|
<Setter Property="Foreground" Value="{StaticResource Text}" />
|
|
<Setter Property="Background" Value="{StaticResource SurfaceAlt}" />
|
|
<Setter Property="BorderBrush" Value="{StaticResource Border}" />
|
|
<Setter Property="BorderThickness" Value="1" />
|
|
<Setter Property="FontSize" Value="13" />
|
|
<Setter Property="Cursor" Value="Hand" />
|
|
<Setter Property="SnapsToDevicePixels" Value="True" />
|
|
<Setter Property="Template">
|
|
<Setter.Value>
|
|
<ControlTemplate TargetType="Button">
|
|
<Border x:Name="b" Background="{TemplateBinding Background}"
|
|
BorderBrush="{TemplateBinding BorderBrush}"
|
|
BorderThickness="{TemplateBinding BorderThickness}"
|
|
CornerRadius="{StaticResource Control.Radius}">
|
|
<ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center"
|
|
Margin="{TemplateBinding Padding}" TextElement.Foreground="{TemplateBinding Foreground}" />
|
|
</Border>
|
|
<ControlTemplate.Triggers>
|
|
<Trigger Property="IsMouseOver" Value="True">
|
|
<Setter TargetName="b" Property="Background" Value="{StaticResource Border}" />
|
|
</Trigger>
|
|
<Trigger Property="IsEnabled" Value="False">
|
|
<Setter Property="Opacity" Value="0.45" />
|
|
<Setter Property="Cursor" Value="Arrow" />
|
|
</Trigger>
|
|
</ControlTemplate.Triggers>
|
|
</ControlTemplate>
|
|
</Setter.Value>
|
|
</Setter>
|
|
</Style>
|
|
|
|
<Style x:Key="PrimaryButton" TargetType="Button" BasedOn="{StaticResource {x:Type Button}}">
|
|
<Setter Property="Background" Value="{StaticResource Accent}" />
|
|
<Setter Property="BorderBrush" Value="{StaticResource Accent}" />
|
|
<Setter Property="FontWeight" Value="SemiBold" />
|
|
<Setter Property="Template">
|
|
<Setter.Value>
|
|
<ControlTemplate TargetType="Button">
|
|
<Border x:Name="b" Background="{TemplateBinding Background}"
|
|
BorderBrush="{TemplateBinding BorderBrush}"
|
|
BorderThickness="{TemplateBinding BorderThickness}"
|
|
CornerRadius="{StaticResource Control.Radius}">
|
|
<ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center"
|
|
Margin="{TemplateBinding Padding}" TextElement.Foreground="White" />
|
|
</Border>
|
|
<ControlTemplate.Triggers>
|
|
<Trigger Property="IsMouseOver" Value="True">
|
|
<Setter TargetName="b" Property="Background" Value="{StaticResource AccentHover}" />
|
|
<Setter TargetName="b" Property="BorderBrush" Value="{StaticResource AccentHover}" />
|
|
</Trigger>
|
|
<Trigger Property="IsEnabled" Value="False">
|
|
<Setter Property="Opacity" Value="0.4" />
|
|
<Setter Property="Cursor" Value="Arrow" />
|
|
</Trigger>
|
|
</ControlTemplate.Triggers>
|
|
</ControlTemplate>
|
|
</Setter.Value>
|
|
</Setter>
|
|
</Style>
|
|
|
|
<Style x:Key="DangerButton" TargetType="Button" BasedOn="{StaticResource PrimaryButton}">
|
|
<Setter Property="Background" Value="{StaticResource Danger}" />
|
|
<Setter Property="BorderBrush" Value="{StaticResource Danger}" />
|
|
</Style>
|
|
|
|
<!-- ===== 공용 다크 ScrollBar ===== -->
|
|
<Style TargetType="Thumb" x:Key="ScrollThumb">
|
|
<Setter Property="Template">
|
|
<Setter.Value>
|
|
<ControlTemplate TargetType="Thumb">
|
|
<Border CornerRadius="4" Background="{StaticResource Border}" Margin="2" />
|
|
</ControlTemplate>
|
|
</Setter.Value>
|
|
</Setter>
|
|
</Style>
|
|
<Style TargetType="RepeatButton" x:Key="ScrollHidden">
|
|
<Setter Property="Opacity" Value="0" />
|
|
<Setter Property="Focusable" Value="False" />
|
|
<Setter Property="IsTabStop" Value="False" />
|
|
<Setter Property="Template">
|
|
<Setter.Value>
|
|
<ControlTemplate TargetType="RepeatButton"><Border Background="Transparent" /></ControlTemplate>
|
|
</Setter.Value>
|
|
</Setter>
|
|
</Style>
|
|
<Style TargetType="ScrollBar">
|
|
<Setter Property="Background" Value="Transparent" />
|
|
<Setter Property="Width" Value="11" />
|
|
<Setter Property="Template">
|
|
<Setter.Value>
|
|
<ControlTemplate TargetType="ScrollBar">
|
|
<Border Background="Transparent">
|
|
<Track x:Name="PART_Track" IsDirectionReversed="True">
|
|
<Track.IncreaseRepeatButton>
|
|
<RepeatButton Style="{StaticResource ScrollHidden}" Command="ScrollBar.PageDownCommand" />
|
|
</Track.IncreaseRepeatButton>
|
|
<Track.DecreaseRepeatButton>
|
|
<RepeatButton Style="{StaticResource ScrollHidden}" Command="ScrollBar.PageUpCommand" />
|
|
</Track.DecreaseRepeatButton>
|
|
<Track.Thumb>
|
|
<Thumb Style="{StaticResource ScrollThumb}" />
|
|
</Track.Thumb>
|
|
</Track>
|
|
</Border>
|
|
</ControlTemplate>
|
|
</Setter.Value>
|
|
</Setter>
|
|
<Style.Triggers>
|
|
<Trigger Property="Orientation" Value="Horizontal">
|
|
<Setter Property="Width" Value="Auto" />
|
|
<Setter Property="Height" Value="11" />
|
|
</Trigger>
|
|
</Style.Triggers>
|
|
</Style>
|
|
|
|
<!-- ===== ComboBox (완전 다크: 토글·화살표·팝업·항목) ===== -->
|
|
<Style x:Key="ComboToggle" TargetType="ToggleButton">
|
|
<Setter Property="Focusable" Value="False" />
|
|
<Setter Property="ClickMode" Value="Press" />
|
|
<Setter Property="Template">
|
|
<Setter.Value>
|
|
<ControlTemplate TargetType="ToggleButton">
|
|
<Border x:Name="b" Background="{StaticResource Surface}" BorderBrush="{StaticResource Border}"
|
|
BorderThickness="1" CornerRadius="{StaticResource Control.Radius}">
|
|
<Grid>
|
|
<Grid.ColumnDefinitions>
|
|
<ColumnDefinition Width="*" />
|
|
<ColumnDefinition Width="28" />
|
|
</Grid.ColumnDefinitions>
|
|
<Path Grid.Column="1" HorizontalAlignment="Center" VerticalAlignment="Center"
|
|
Data="M0,0 L4,4 L8,0 Z" Fill="{StaticResource TextSubtle}" />
|
|
</Grid>
|
|
</Border>
|
|
<ControlTemplate.Triggers>
|
|
<Trigger Property="IsMouseOver" Value="True">
|
|
<Setter TargetName="b" Property="BorderBrush" Value="{StaticResource Accent}" />
|
|
</Trigger>
|
|
</ControlTemplate.Triggers>
|
|
</ControlTemplate>
|
|
</Setter.Value>
|
|
</Setter>
|
|
</Style>
|
|
|
|
<Style TargetType="ComboBox">
|
|
<Setter Property="MinHeight" Value="{StaticResource Control.Height}" />
|
|
<Setter Property="Foreground" Value="{StaticResource Text}" />
|
|
<Setter Property="FontSize" Value="13" />
|
|
<Setter Property="SnapsToDevicePixels" Value="True" />
|
|
<Setter Property="Template">
|
|
<Setter.Value>
|
|
<ControlTemplate TargetType="ComboBox">
|
|
<Grid>
|
|
<ToggleButton x:Name="Toggle" Style="{StaticResource ComboToggle}"
|
|
IsChecked="{Binding IsDropDownOpen, Mode=TwoWay, RelativeSource={RelativeSource TemplatedParent}}" />
|
|
<ContentPresenter x:Name="ContentSite" IsHitTestVisible="False"
|
|
Content="{TemplateBinding SelectionBoxItem}"
|
|
ContentTemplate="{TemplateBinding SelectionBoxItemTemplate}"
|
|
Margin="11,0,32,0" VerticalAlignment="Center" HorizontalAlignment="Left"
|
|
TextElement.Foreground="{StaticResource Text}" />
|
|
<Popup x:Name="Popup" Placement="Bottom" IsOpen="{TemplateBinding IsDropDownOpen}"
|
|
AllowsTransparency="True" Focusable="False" PopupAnimation="Slide">
|
|
<Border Background="{StaticResource PopupBg}" BorderBrush="{StaticResource Border}"
|
|
BorderThickness="1" CornerRadius="6" Margin="0,4,0,4"
|
|
MinWidth="{Binding ActualWidth, ElementName=Toggle}"
|
|
MaxHeight="{TemplateBinding MaxDropDownHeight}">
|
|
<ScrollViewer>
|
|
<ItemsPresenter KeyboardNavigation.DirectionalNavigation="Contained" Margin="0,3" />
|
|
</ScrollViewer>
|
|
</Border>
|
|
</Popup>
|
|
</Grid>
|
|
<ControlTemplate.Triggers>
|
|
<Trigger Property="IsEnabled" Value="False">
|
|
<Setter Property="Opacity" Value="0.5" />
|
|
</Trigger>
|
|
</ControlTemplate.Triggers>
|
|
</ControlTemplate>
|
|
</Setter.Value>
|
|
</Setter>
|
|
</Style>
|
|
|
|
<Style TargetType="ComboBoxItem">
|
|
<Setter Property="Foreground" Value="{StaticResource Text}" />
|
|
<Setter Property="FontSize" Value="13" />
|
|
<Setter Property="Padding" Value="11,8" />
|
|
<Setter Property="Template">
|
|
<Setter.Value>
|
|
<ControlTemplate TargetType="ComboBoxItem">
|
|
<Border x:Name="b" Background="Transparent" Padding="{TemplateBinding Padding}"
|
|
CornerRadius="4" Margin="4,1">
|
|
<ContentPresenter TextElement.Foreground="{StaticResource Text}" />
|
|
</Border>
|
|
<ControlTemplate.Triggers>
|
|
<Trigger Property="IsMouseOver" Value="True">
|
|
<Setter TargetName="b" Property="Background" Value="{StaticResource Border}" />
|
|
</Trigger>
|
|
<Trigger Property="IsHighlighted" Value="True">
|
|
<Setter TargetName="b" Property="Background" Value="{StaticResource Accent}" />
|
|
</Trigger>
|
|
</ControlTemplate.Triggers>
|
|
</ControlTemplate>
|
|
</Setter.Value>
|
|
</Setter>
|
|
</Style>
|
|
|
|
<!-- ===== TextBox (다크) ===== -->
|
|
<Style TargetType="TextBox">
|
|
<Setter Property="MinHeight" Value="{StaticResource Control.Height}" />
|
|
<Setter Property="Padding" Value="10,6" />
|
|
<Setter Property="VerticalContentAlignment" Value="Center" />
|
|
<Setter Property="Foreground" Value="{StaticResource Text}" />
|
|
<Setter Property="Background" Value="{StaticResource Surface}" />
|
|
<Setter Property="BorderBrush" Value="{StaticResource Border}" />
|
|
<Setter Property="CaretBrush" Value="{StaticResource Text}" />
|
|
<Setter Property="SelectionBrush" Value="{StaticResource Accent}" />
|
|
<Setter Property="FontSize" Value="13" />
|
|
<Setter Property="Template">
|
|
<Setter.Value>
|
|
<ControlTemplate TargetType="TextBox">
|
|
<Border Background="{TemplateBinding Background}" BorderBrush="{TemplateBinding BorderBrush}"
|
|
BorderThickness="1" CornerRadius="{StaticResource Control.Radius}">
|
|
<ScrollViewer x:Name="PART_ContentHost" Focusable="False" Margin="{TemplateBinding Padding}"
|
|
VerticalAlignment="{TemplateBinding VerticalContentAlignment}" />
|
|
</Border>
|
|
<ControlTemplate.Triggers>
|
|
<Trigger Property="IsKeyboardFocused" Value="True">
|
|
<Setter Property="BorderBrush" Value="{StaticResource Accent}" />
|
|
</Trigger>
|
|
</ControlTemplate.Triggers>
|
|
</ControlTemplate>
|
|
</Setter.Value>
|
|
</Setter>
|
|
</Style>
|
|
|
|
<!-- ===== CheckBox (다크) ===== -->
|
|
<Style TargetType="CheckBox">
|
|
<Setter Property="Foreground" Value="{StaticResource Text}" />
|
|
<Setter Property="FontSize" Value="13" />
|
|
<Setter Property="Cursor" Value="Hand" />
|
|
<Setter Property="Template">
|
|
<Setter.Value>
|
|
<ControlTemplate TargetType="CheckBox">
|
|
<Grid Background="Transparent">
|
|
<Grid.ColumnDefinitions>
|
|
<ColumnDefinition Width="Auto" />
|
|
<ColumnDefinition Width="*" />
|
|
</Grid.ColumnDefinitions>
|
|
<Border x:Name="box" Width="18" Height="18" CornerRadius="4" BorderThickness="1.5"
|
|
BorderBrush="{StaticResource Border}" Background="{StaticResource Surface}"
|
|
VerticalAlignment="Center">
|
|
<Path x:Name="chk" Data="M0,4 L3.5,7.5 L9,1" Stroke="White" StrokeThickness="2"
|
|
StrokeEndLineCap="Round" StrokeStartLineCap="Round"
|
|
HorizontalAlignment="Center" VerticalAlignment="Center" Visibility="Collapsed" />
|
|
</Border>
|
|
<ContentPresenter Grid.Column="1" Margin="9,0,0,0" VerticalAlignment="Center"
|
|
TextElement.Foreground="{TemplateBinding Foreground}" />
|
|
</Grid>
|
|
<ControlTemplate.Triggers>
|
|
<Trigger Property="IsChecked" Value="True">
|
|
<Setter TargetName="box" Property="Background" Value="{StaticResource Accent}" />
|
|
<Setter TargetName="box" Property="BorderBrush" Value="{StaticResource Accent}" />
|
|
<Setter TargetName="chk" Property="Visibility" Value="Visible" />
|
|
</Trigger>
|
|
<Trigger Property="IsMouseOver" Value="True">
|
|
<Setter TargetName="box" Property="BorderBrush" Value="{StaticResource Accent}" />
|
|
</Trigger>
|
|
</ControlTemplate.Triggers>
|
|
</ControlTemplate>
|
|
</Setter.Value>
|
|
</Setter>
|
|
</Style>
|
|
|
|
<!-- ===== RadioButton (다크) ===== -->
|
|
<Style TargetType="RadioButton">
|
|
<Setter Property="Foreground" Value="{StaticResource Text}" />
|
|
<Setter Property="FontSize" Value="13" />
|
|
<Setter Property="Margin" Value="0,5" />
|
|
<Setter Property="Cursor" Value="Hand" />
|
|
<Setter Property="Template">
|
|
<Setter.Value>
|
|
<ControlTemplate TargetType="RadioButton">
|
|
<Grid Background="Transparent">
|
|
<Grid.ColumnDefinitions>
|
|
<ColumnDefinition Width="Auto" />
|
|
<ColumnDefinition Width="*" />
|
|
</Grid.ColumnDefinitions>
|
|
<Border x:Name="box" Width="18" Height="18" CornerRadius="9" BorderThickness="1.5"
|
|
BorderBrush="{StaticResource Border}" Background="{StaticResource Surface}"
|
|
VerticalAlignment="Top">
|
|
<Ellipse x:Name="dot" Width="8" Height="8" Fill="White" Visibility="Collapsed" />
|
|
</Border>
|
|
<ContentPresenter Grid.Column="1" Margin="9,0,0,0" VerticalAlignment="Center"
|
|
TextElement.Foreground="{TemplateBinding Foreground}" />
|
|
</Grid>
|
|
<ControlTemplate.Triggers>
|
|
<Trigger Property="IsChecked" Value="True">
|
|
<Setter TargetName="box" Property="Background" Value="{StaticResource Accent}" />
|
|
<Setter TargetName="box" Property="BorderBrush" Value="{StaticResource Accent}" />
|
|
<Setter TargetName="dot" Property="Visibility" Value="Visible" />
|
|
</Trigger>
|
|
<Trigger Property="IsMouseOver" Value="True">
|
|
<Setter TargetName="box" Property="BorderBrush" Value="{StaticResource Accent}" />
|
|
</Trigger>
|
|
</ControlTemplate.Triggers>
|
|
</ControlTemplate>
|
|
</Setter.Value>
|
|
</Setter>
|
|
</Style>
|
|
|
|
<!-- ===== ProgressBar (다크) ===== -->
|
|
<Style TargetType="ProgressBar">
|
|
<Setter Property="Background" Value="{StaticResource Bg}" />
|
|
<Setter Property="Foreground" Value="{StaticResource Accent}" />
|
|
<Setter Property="Template">
|
|
<Setter.Value>
|
|
<ControlTemplate TargetType="ProgressBar">
|
|
<Border Background="{TemplateBinding Background}" CornerRadius="5" ClipToBounds="True">
|
|
<Grid>
|
|
<Border x:Name="PART_Track" />
|
|
<Border x:Name="PART_Indicator" Background="{TemplateBinding Foreground}"
|
|
HorizontalAlignment="Left" CornerRadius="5" />
|
|
</Grid>
|
|
</Border>
|
|
</ControlTemplate>
|
|
</Setter.Value>
|
|
</Setter>
|
|
</Style>
|
|
|
|
<Style TargetType="Label">
|
|
<Setter Property="Foreground" Value="{StaticResource TextSubtle}" />
|
|
<Setter Property="FontSize" Value="12" />
|
|
<Setter Property="Padding" Value="0,0,0,2" />
|
|
</Style>
|
|
|
|
<!-- ToolTip 다크 -->
|
|
<Style TargetType="ToolTip">
|
|
<Setter Property="Background" Value="{StaticResource PopupBg}" />
|
|
<Setter Property="Foreground" Value="{StaticResource Text}" />
|
|
<Setter Property="BorderBrush" Value="{StaticResource Border}" />
|
|
</Style>
|
|
|
|
</ResourceDictionary>
|