Files
omni-notify/MainWindow.xaml
gamewhale 21fd8eaf55 release: 发布 v0.2.0
本次发布聚焦降低误报风险、规范发布产物和重构仓库文档。

主要变更:

- 删除开机自启功能,移除 Windows 启动项注册表写入逻辑。

- 新增标准应用清单,声明应用以普通用户权限运行。

- 新增 framework-dependent 发布脚本,保持发布包不内置 .NET 运行时。

- 禁用单文件、自解压、裁剪和 ReadyToRun 发布方式,保持产物结构透明。

- 将发布资产命名规范化为 omni-notify-v0.2.0-win-x64.zip。

- 重写文档结构:README.md 面向用户,docs/development.md 面向开发者。

- 删除过时且内容重复的 PRD.md 与 docs/usage.md。

验证:

- dotnet build .\OmniNotify.csproj -c Release 构建通过。

- 发布脚本成功生成 v0.2.0 win-x64 压缩包。

- 发布目录未包含 coreclr.dll、hostfxr.dll、hostpolicy.dll 等 .NET 运行时文件。
2026-05-20 13:01:41 +08:00

205 lines
13 KiB
XML

<Window x:Class="OmniNotify.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"
mc:Ignorable="d"
Title="Omni-Notify"
MinHeight="680"
MinWidth="1040"
Height="760"
Width="1180"
Background="#F5F7FA">
<Grid Margin="18">
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<DockPanel Margin="0,0,0,14">
<StackPanel>
<TextBlock Text="Omni-Notify" FontSize="26" FontWeight="SemiBold" Foreground="#1D2733" />
<TextBlock x:Name="ServerStatusText" Margin="0,4,0,0" Foreground="#5C6673" />
</StackPanel>
<StackPanel Orientation="Horizontal" DockPanel.Dock="Right" HorizontalAlignment="Right">
<Button Content="发送测试" Width="104" Height="34" Margin="0,0,8,0" Click="SendTest_Click" />
<Button Content="保存配置" Width="104" Height="34" Click="Save_Click" />
</StackPanel>
</DockPanel>
<TabControl x:Name="MainTabs" Grid.Row="1">
<TabItem Header="频道">
<Grid Margin="0,14,0,0">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="280" />
<ColumnDefinition Width="14" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Border Background="White" BorderBrush="#D8DEE8" BorderThickness="1" CornerRadius="6" Padding="12">
<DockPanel>
<StackPanel DockPanel.Dock="Bottom" Margin="0,12,0,0">
<Button Content="新建频道" Height="32" Margin="0,0,0,8" Click="AddChannel_Click" />
<Button Content="删除频道" Height="32" Click="DeleteChannel_Click" />
</StackPanel>
<ListBox x:Name="ChannelList" DisplayMemberPath="Name" SelectionChanged="ChannelList_SelectionChanged" />
</DockPanel>
</Border>
<ScrollViewer Grid.Column="2" VerticalScrollBarVisibility="Auto">
<Border Background="White" BorderBrush="#D8DEE8" BorderThickness="1" CornerRadius="6" Padding="18">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<GroupBox Header="频道标识" Grid.ColumnSpan="2" Margin="0,0,0,12">
<Grid Margin="12">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="120" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<TextBlock Text="频道名" VerticalAlignment="Center" />
<TextBox x:Name="ChannelNameBox" Grid.Column="1" />
</Grid>
</GroupBox>
<GroupBox Header="多屏与位置" Grid.Row="1" Margin="0,0,8,12">
<UniformGrid Columns="2" Margin="12">
<TextBlock Text="显示器序号" VerticalAlignment="Center" />
<TextBox x:Name="ScreenIndexBox" />
<TextBlock Text="九宫格位置" VerticalAlignment="Center" />
<ComboBox x:Name="AnchorBox" DisplayMemberPath="Label" SelectedValuePath="Value" />
<TextBlock Text="横向边距" VerticalAlignment="Center" />
<TextBox x:Name="MarginXBox" />
<TextBlock Text="纵向边距" VerticalAlignment="Center" />
<TextBox x:Name="MarginYBox" />
</UniformGrid>
</GroupBox>
<GroupBox Header="尺寸与排版" Grid.Row="1" Grid.Column="1" Margin="8,0,0,12">
<UniformGrid Columns="2" Margin="12">
<TextBlock Text="宽度" VerticalAlignment="Center" />
<TextBox x:Name="WidthBox" />
<TextBlock Text="最大高度" VerticalAlignment="Center" />
<TextBox x:Name="MaxHeightBox" />
<TextBlock Text="内边距" VerticalAlignment="Center" />
<TextBox x:Name="PaddingBox" />
<TextBlock Text="字体" VerticalAlignment="Center" />
<TextBox x:Name="FontFamilyBox" />
</UniformGrid>
</GroupBox>
<GroupBox Header="视觉样式" Grid.Row="2" Margin="0,0,8,12">
<UniformGrid Columns="2" Margin="12">
<TextBlock Text="标题字号" VerticalAlignment="Center" />
<TextBox x:Name="TitleFontSizeBox" />
<TextBlock Text="正文字号" VerticalAlignment="Center" />
<TextBox x:Name="BodyFontSizeBox" />
<TextBlock Text="文字颜色" VerticalAlignment="Center" />
<TextBox x:Name="TextColorBox" />
<TextBlock Text="背景颜色" VerticalAlignment="Center" />
<TextBox x:Name="BackgroundColorBox" />
<TextBlock Text="背景透明度" VerticalAlignment="Center" />
<TextBox x:Name="BackgroundOpacityBox" />
<TextBlock Text="边框颜色" VerticalAlignment="Center" />
<TextBox x:Name="BorderColorBox" />
<TextBlock Text="边框透明度" VerticalAlignment="Center" />
<TextBox x:Name="BorderOpacityBox" />
<TextBlock Text="整体透明度" VerticalAlignment="Center" />
<TextBox x:Name="OverallOpacityBox" />
</UniformGrid>
</GroupBox>
<GroupBox Header="时间、动画与高级行为" Grid.Row="2" Grid.Column="1" Margin="8,0,0,12">
<UniformGrid Columns="2" Margin="12">
<TextBlock Text="存在时间(秒)" VerticalAlignment="Center" />
<TextBox x:Name="LifetimeBox" />
<TextBlock Text="出现动画" VerticalAlignment="Center" />
<ComboBox x:Name="EnterAnimationBox" DisplayMemberPath="Label" SelectedValuePath="Value" />
<TextBlock Text="消失动画" VerticalAlignment="Center" />
<ComboBox x:Name="ExitAnimationBox" DisplayMemberPath="Label" SelectedValuePath="Value" />
<TextBlock Text="堆叠模式" VerticalAlignment="Center" />
<ComboBox x:Name="StackModeBox" DisplayMemberPath="Label" SelectedValuePath="Value" />
<TextBlock Text="溢出模式" VerticalAlignment="Center" />
<ComboBox x:Name="OverflowModeBox" DisplayMemberPath="Label" SelectedValuePath="Value" />
<TextBlock Text="分割间隔(秒)" VerticalAlignment="Center" />
<TextBox x:Name="SplitIntervalBox" />
<TextBlock Text="滚动停留(秒)" VerticalAlignment="Center" />
<TextBox x:Name="VerticalScrollHoldBox" />
<TextBlock Text="滚动速度(px/秒)" VerticalAlignment="Center" />
<TextBox x:Name="VerticalScrollSpeedBox" />
</UniformGrid>
</GroupBox>
</Grid>
</Border>
</ScrollViewer>
</Grid>
</TabItem>
<TabItem Header="历史">
<Grid Margin="0,14,0,0">
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<Border Background="White" BorderBrush="#D8DEE8" BorderThickness="1" CornerRadius="6" Padding="12" Margin="0,0,0,12">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="160" />
<ColumnDefinition Width="160" />
<ColumnDefinition Width="120" />
</Grid.ColumnDefinitions>
<TextBox x:Name="SearchBox" Height="32" Margin="0,0,8,0" TextChanged="HistoryFilter_Changed" />
<ComboBox x:Name="HistoryChannelFilter" Grid.Column="1" Margin="0,0,8,0" SelectionChanged="HistoryFilter_Changed" />
<ComboBox x:Name="HistoryStatusFilter" Grid.Column="2" Margin="0,0,8,0" SelectionChanged="HistoryFilter_Changed" />
<Button Content="清空历史" Grid.Column="3" Click="ClearHistory_Click" />
</Grid>
</Border>
<DataGrid x:Name="HistoryGrid" Grid.Row="1" AutoGenerateColumns="False" IsReadOnly="True" SelectionMode="Single">
<DataGrid.ContextMenu>
<ContextMenu>
<MenuItem Header="复制完整内容" Click="CopyHistory_Click" />
<MenuItem Header="重新显示该弹窗" Click="ReplayHistory_Click" />
</ContextMenu>
</DataGrid.ContextMenu>
<DataGrid.Columns>
<DataGridTextColumn Header="接收时间" Binding="{Binding ReceivedAt}" Width="170" />
<DataGridTextColumn Header="频道来源" Binding="{Binding Channel}" Width="140" />
<DataGridTextColumn Header="状态" Binding="{Binding Status}" Width="130" />
<DataGridTextColumn Header="标题" Binding="{Binding Title}" Width="220" />
<DataGridTextColumn Header="正文" Binding="{Binding Body}" Width="*" />
</DataGrid.Columns>
</DataGrid>
</Grid>
</TabItem>
<TabItem Header="全局设置">
<Border Background="White" BorderBrush="#D8DEE8" BorderThickness="1" CornerRadius="6" Padding="18" Margin="0,14,0,0">
<StackPanel Width="520" HorizontalAlignment="Left">
<CheckBox x:Name="DndBox" Content="免打扰模式:接收但不弹窗" Margin="0,0,0,14" />
<UniformGrid Columns="2">
<TextBlock Text="每秒最多处理消息数" VerticalAlignment="Center" />
<TextBox x:Name="RateLimitBox" />
<TextBlock Text="历史保留天数" VerticalAlignment="Center" />
<TextBox x:Name="RetainDaysBox" />
<TextBlock Text="历史最多保留条数" VerticalAlignment="Center" />
<TextBox x:Name="RetainCountBox" />
<TextBlock Text="本地监听端口" VerticalAlignment="Center" />
<TextBox x:Name="PortBox" />
</UniformGrid>
<Button x:Name="ResetBreakerButton" Content="解除熔断" Height="34" Margin="0,18,0,0" Click="ResetBreaker_Click" />
</StackPanel>
</Border>
</TabItem>
</TabControl>
</Grid>
</Window>