Optimize the UI for routing settings

This commit is contained in:
2dust 2025-06-19 10:48:47 +08:00
parent 298bb64e66
commit 93a20852f5
2 changed files with 267 additions and 210 deletions

View file

@ -24,28 +24,11 @@
<MenuItem x:Name="menuRoutingAdvancedAdd2" Header="{x:Static resx:ResUI.menuRoutingAdvancedAdd}" /> <MenuItem x:Name="menuRoutingAdvancedAdd2" Header="{x:Static resx:ResUI.menuRoutingAdvancedAdd}" />
<MenuItem x:Name="menuRoutingAdvancedImportRules2" Header="{x:Static resx:ResUI.menuRoutingAdvancedImportRules}" /> <MenuItem x:Name="menuRoutingAdvancedImportRules2" Header="{x:Static resx:ResUI.menuRoutingAdvancedImportRules}" />
</Menu> </Menu>
<TextBlock VerticalAlignment="Center">
<HyperlinkButton Classes="WithIcon" Click="linkdomainStrategy_Click">
<TextBlock Text="{x:Static resx:ResUI.TbdomainStrategy}" />
</HyperlinkButton>
</TextBlock>
<ComboBox x:Name="cmbdomainStrategy" Width="110" />
<Separator />
<TextBlock VerticalAlignment="Center" Text="{x:Static resx:ResUI.TbdomainMatcher}" />
<ComboBox x:Name="cmbdomainMatcher" Width="60" />
<Separator />
<TextBlock VerticalAlignment="Center">
<HyperlinkButton Classes="WithIcon" Click="linkdomainStrategy4Singbox_Click">
<TextBlock Text="{x:Static resx:ResUI.TbdomainStrategy4Singbox}" />
</HyperlinkButton>
</TextBlock>
<ComboBox x:Name="cmbdomainStrategy4Singbox" Width="100" />
</StackPanel> </StackPanel>
<StackPanel <StackPanel
HorizontalAlignment="Right"
Margin="{StaticResource Margin4}" Margin="{StaticResource Margin4}"
HorizontalAlignment="Right"
DockPanel.Dock="Bottom" DockPanel.Dock="Bottom"
Orientation="Horizontal"> Orientation="Horizontal">
<StackPanel <StackPanel
@ -69,58 +52,112 @@
IsCancel="True" /> IsCancel="True" />
</StackPanel> </StackPanel>
<DockPanel> <Grid
<TabControl x:Name="tabAdvanced"> Margin="{StaticResource Margin4}"
<TabItem HorizontalAlignment="Left" Header="{x:Static resx:ResUI.TbRoutingTabRuleList}"> ColumnDefinitions="Auto,Auto"
<DataGrid DockPanel.Dock="Top"
x:Name="lstRoutings" RowDefinitions="Auto,Auto,Auto">
AutoGenerateColumns="False"
BorderThickness="1"
CanUserResizeColumns="True"
GridLinesVisibility="All"
HeadersVisibility="Column"
IsReadOnly="True"
ItemsSource="{Binding RoutingItems}">
<DataGrid.KeyBindings>
<KeyBinding Command="{Binding RoutingAdvancedSetDefaultCmd}" Gesture="Enter" />
</DataGrid.KeyBindings>
<DataGrid.ContextMenu>
<ContextMenu>
<MenuItem x:Name="menuRoutingAdvancedAdd" Header="{x:Static resx:ResUI.menuRoutingAdvancedAdd}" />
<MenuItem x:Name="menuRoutingAdvancedRemove" Header="{x:Static resx:ResUI.menuRoutingAdvancedRemove}" />
<MenuItem x:Name="menuRoutingAdvancedSelectAll" Header="{x:Static resx:ResUI.menuSelectAll}" />
<MenuItem x:Name="menuRoutingAdvancedSetDefault" Header="{x:Static resx:ResUI.menuRoutingAdvancedSetDefault}" />
<Separator />
<MenuItem x:Name="menuRoutingAdvancedImportRules" Header="{x:Static resx:ResUI.menuRoutingAdvancedImportRules}" />
</ContextMenu>
</DataGrid.ContextMenu>
<DataGrid.Columns> <TextBlock
<DataGridCheckBoxColumn Width="40" Binding="{Binding IsActive}" /> Grid.Row="0"
<DataGridTextColumn Grid.Column="0"
Width="*" Margin="{StaticResource Margin4}"
Binding="{Binding Remarks}" VerticalAlignment="Center">
Header="{x:Static resx:ResUI.LvRemarks}" /> <HyperlinkButton Classes="WithIcon" Click="linkdomainStrategy_Click">
<DataGridTextColumn <TextBlock Text="{x:Static resx:ResUI.TbdomainStrategy}" />
Width="60" </HyperlinkButton>
Binding="{Binding RuleNum}" </TextBlock>
Header="{x:Static resx:ResUI.LvCount}" /> <ComboBox
<DataGridTextColumn x:Name="cmbdomainStrategy"
Width="60" Grid.Row="0"
Binding="{Binding Sort}" Grid.Column="1"
Header="{x:Static resx:ResUI.LvSort}" /> Width="300"
<DataGridTextColumn Margin="{StaticResource Margin4}"
Width="*" HorizontalAlignment="Left"
Binding="{Binding Url}" VerticalAlignment="Center" />
Header="{x:Static resx:ResUI.LvUrl}" />
<DataGridTextColumn <TextBlock
Width="300" Grid.Row="1"
Binding="{Binding CustomIcon}" Grid.Column="0"
Header="{x:Static resx:ResUI.LvCustomIcon}" /> Margin="{StaticResource Margin4}"
</DataGrid.Columns> VerticalAlignment="Center"
</DataGrid> Text="{x:Static resx:ResUI.TbdomainMatcher}" />
</TabItem> <ComboBox
</TabControl> x:Name="cmbdomainMatcher"
</DockPanel> Grid.Row="1"
Grid.Column="1"
Width="300"
Margin="{StaticResource Margin4}" />
<TextBlock
Grid.Row="2"
Grid.Column="0"
Margin="{StaticResource Margin4}"
VerticalAlignment="Center">
<HyperlinkButton Classes="WithIcon" Click="linkdomainStrategy4Singbox_Click">
<TextBlock Text="{x:Static resx:ResUI.TbdomainStrategy4Singbox}" />
</HyperlinkButton>
</TextBlock>
<ComboBox
x:Name="cmbdomainStrategy4Singbox"
Grid.Row="2"
Grid.Column="1"
Width="300"
Margin="{StaticResource Margin4}"
HorizontalAlignment="Left"
VerticalAlignment="Center" />
</Grid>
<TabControl x:Name="tabAdvanced">
<TabItem HorizontalAlignment="Left" Header="{x:Static resx:ResUI.TbRoutingTabRuleList}">
<DataGrid
x:Name="lstRoutings"
AutoGenerateColumns="False"
BorderThickness="1"
CanUserResizeColumns="True"
GridLinesVisibility="All"
HeadersVisibility="Column"
IsReadOnly="True"
ItemsSource="{Binding RoutingItems}">
<DataGrid.KeyBindings>
<KeyBinding Command="{Binding RoutingAdvancedSetDefaultCmd}" Gesture="Enter" />
</DataGrid.KeyBindings>
<DataGrid.ContextMenu>
<ContextMenu>
<MenuItem x:Name="menuRoutingAdvancedAdd" Header="{x:Static resx:ResUI.menuRoutingAdvancedAdd}" />
<MenuItem x:Name="menuRoutingAdvancedRemove" Header="{x:Static resx:ResUI.menuRoutingAdvancedRemove}" />
<MenuItem x:Name="menuRoutingAdvancedSelectAll" Header="{x:Static resx:ResUI.menuSelectAll}" />
<MenuItem x:Name="menuRoutingAdvancedSetDefault" Header="{x:Static resx:ResUI.menuRoutingAdvancedSetDefault}" />
<Separator />
<MenuItem x:Name="menuRoutingAdvancedImportRules" Header="{x:Static resx:ResUI.menuRoutingAdvancedImportRules}" />
</ContextMenu>
</DataGrid.ContextMenu>
<DataGrid.Columns>
<DataGridCheckBoxColumn Width="40" Binding="{Binding IsActive}" />
<DataGridTextColumn
Width="*"
Binding="{Binding Remarks}"
Header="{x:Static resx:ResUI.LvRemarks}" />
<DataGridTextColumn
Width="60"
Binding="{Binding RuleNum}"
Header="{x:Static resx:ResUI.LvCount}" />
<DataGridTextColumn
Width="60"
Binding="{Binding Sort}"
Header="{x:Static resx:ResUI.LvSort}" />
<DataGridTextColumn
Width="*"
Binding="{Binding Url}"
Header="{x:Static resx:ResUI.LvUrl}" />
<DataGridTextColumn
Width="300"
Binding="{Binding CustomIcon}"
Header="{x:Static resx:ResUI.LvCustomIcon}" />
</DataGrid.Columns>
</DataGrid>
</TabItem>
</TabControl>
</DockPanel> </DockPanel>
</Window> </Window>

View file

@ -1,4 +1,4 @@
<reactiveui:ReactiveWindow <reactiveui:ReactiveWindow
x:Class="v2rayN.Views.RoutingSettingWindow" x:Class="v2rayN.Views.RoutingSettingWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
@ -29,68 +29,25 @@
VerticalAlignment="Center" VerticalAlignment="Center"
ClipToBounds="True" ClipToBounds="True"
Style="{StaticResource MaterialDesignToolBar}"> Style="{StaticResource MaterialDesignToolBar}">
<Menu Margin="0,1" Style="{StaticResource ToolbarMenu}"> <Button x:Name="menuRoutingAdvancedAdd2">
<MenuItem x:Name="menuRoutingAdvanced" Padding="8,0"> <StackPanel Orientation="Horizontal">
<MenuItem.Header> <materialDesign:PackIcon
<StackPanel Orientation="Horizontal"> Margin="{StaticResource MarginRight8}"
<materialDesign:PackIcon VerticalAlignment="Center"
Margin="{StaticResource MarginRight8}" Kind="Plus" />
VerticalAlignment="Center" <TextBlock Style="{StaticResource ToolbarTextBlock}" Text="{x:Static resx:ResUI.menuRoutingAdvancedAdd}" />
Kind="Routes" /> </StackPanel>
<TextBlock Text="{x:Static resx:ResUI.menuRoutingAdvanced}" /> </Button>
</StackPanel>
</MenuItem.Header>
<MenuItem
x:Name="menuRoutingAdvancedAdd2"
Height="{StaticResource MenuItemHeight}"
Header="{x:Static resx:ResUI.menuRoutingAdvancedAdd}" />
<MenuItem
x:Name="menuRoutingAdvancedImportRules2"
Height="{StaticResource MenuItemHeight}"
Header="{x:Static resx:ResUI.menuRoutingAdvancedImportRules}" />
</MenuItem>
</Menu>
<Separator /> <Separator />
<TextBlock <Button x:Name="menuRoutingAdvancedImportRules2">
Margin="{StaticResource MarginLeft8}" <StackPanel Orientation="Horizontal">
VerticalAlignment="Center" <materialDesign:PackIcon
Style="{StaticResource ToolbarTextBlock}"> Margin="{StaticResource MarginRight8}"
<Hyperlink Click="linkdomainStrategy_Click"> VerticalAlignment="Center"
<TextBlock Text="{x:Static resx:ResUI.TbdomainStrategy}" /> Kind="Import" />
<materialDesign:PackIcon Kind="Link" /> <TextBlock Style="{StaticResource ToolbarTextBlock}" Text="{x:Static resx:ResUI.menuRoutingAdvancedImportRules}" />
</Hyperlink> </StackPanel>
</TextBlock> </Button>
<ComboBox
x:Name="cmbdomainStrategy"
Width="110"
Margin="{StaticResource MarginLeft8}"
Style="{StaticResource DefComboBox}" />
<Separator />
<TextBlock
Margin="{StaticResource MarginLeft8}"
VerticalAlignment="Center"
Style="{StaticResource ToolbarTextBlock}"
Text="{x:Static resx:ResUI.TbdomainMatcher}" />
<ComboBox
x:Name="cmbdomainMatcher"
Width="60"
Margin="{StaticResource MarginLeft8}"
Style="{StaticResource DefComboBox}" />
<Separator />
<TextBlock
Margin="{StaticResource MarginLeft8}"
VerticalAlignment="Center"
Style="{StaticResource ToolbarTextBlock}">
<Hyperlink Click="linkdomainStrategy4Singbox_Click">
<TextBlock Text="{x:Static resx:ResUI.TbdomainStrategy4Singbox}" />
<materialDesign:PackIcon Kind="Link" />
</Hyperlink>
</TextBlock>
<ComboBox
x:Name="cmbdomainStrategy4Singbox"
Width="100"
Margin="{StaticResource MarginLeft8}"
Style="{StaticResource DefComboBox}" />
</ToolBar> </ToolBar>
</ToolBarTray> </ToolBarTray>
@ -122,82 +79,145 @@
Style="{StaticResource DefButton}" /> Style="{StaticResource DefButton}" />
</StackPanel> </StackPanel>
<DockPanel> <Grid Margin="{StaticResource Margin8}" DockPanel.Dock="Top">
<TabControl x:Name="tabAdvanced"> <Grid.RowDefinitions>
<TabItem HorizontalAlignment="Left" Header="{x:Static resx:ResUI.TbRoutingTabRuleList}"> <RowDefinition Height="Auto" />
<DataGrid <RowDefinition Height="Auto" />
x:Name="lstRoutings" <RowDefinition Height="Auto" />
AutoGenerateColumns="False" </Grid.RowDefinitions>
BorderThickness="1" <Grid.ColumnDefinitions>
CanUserAddRows="False" <ColumnDefinition Width="Auto" />
CanUserResizeRows="False" <ColumnDefinition Width="Auto" />
CanUserSortColumns="False" </Grid.ColumnDefinitions>
EnableRowVirtualization="True"
GridLinesVisibility="All" <TextBlock
HeadersVisibility="Column" Grid.Row="0"
IsReadOnly="True" Grid.Column="0"
Style="{StaticResource DefDataGrid}"> Margin="{StaticResource Margin4}"
<DataGrid.ContextMenu> VerticalAlignment="Center"
<ContextMenu Style="{StaticResource DefContextMenu}"> Style="{StaticResource ToolbarTextBlock}">
<MenuItem <Hyperlink Click="linkdomainStrategy_Click">
x:Name="menuRoutingAdvancedAdd" <TextBlock Text="{x:Static resx:ResUI.TbdomainStrategy}" />
Height="{StaticResource MenuItemHeight}" <materialDesign:PackIcon Kind="Link" />
Header="{x:Static resx:ResUI.menuRoutingAdvancedAdd}" /> </Hyperlink>
<MenuItem </TextBlock>
x:Name="menuRoutingAdvancedRemove" <ComboBox
Height="{StaticResource MenuItemHeight}" x:Name="cmbdomainStrategy"
Header="{x:Static resx:ResUI.menuRoutingAdvancedRemove}" /> Grid.Row="0"
<MenuItem Grid.Column="1"
x:Name="menuRoutingAdvancedSelectAll" Width="300"
Height="{StaticResource MenuItemHeight}" Margin="{StaticResource Margin4}"
Header="{x:Static resx:ResUI.menuSelectAll}" /> Style="{StaticResource DefComboBox}" />
<MenuItem
x:Name="menuRoutingAdvancedSetDefault" <TextBlock
Height="{StaticResource MenuItemHeight}" Grid.Row="1"
Header="{x:Static resx:ResUI.menuRoutingAdvancedSetDefault}" /> Grid.Column="0"
<Separator /> Margin="{StaticResource Margin4}"
<MenuItem VerticalAlignment="Center"
x:Name="menuRoutingAdvancedImportRules" Style="{StaticResource ToolbarTextBlock}"
Height="{StaticResource MenuItemHeight}" Text="{x:Static resx:ResUI.TbdomainMatcher}" />
Header="{x:Static resx:ResUI.menuRoutingAdvancedImportRules}" /> <ComboBox
</ContextMenu> x:Name="cmbdomainMatcher"
</DataGrid.ContextMenu> Grid.Row="1"
<DataGrid.Resources> Grid.Column="1"
<Style BasedOn="{StaticResource MaterialDesignDataGridCell}" TargetType="DataGridCell"> Width="300"
<Style.Triggers> Margin="{StaticResource Margin4}"
<DataTrigger Binding="{Binding IsActive}" Value="True"> Style="{StaticResource DefComboBox}" />
<Setter Property="Background" Value="{DynamicResource MaterialDesign.Brush.Primary.Light}" />
<Setter Property="Foreground" Value="Black" /> <TextBlock
<Setter Property="BorderBrush" Value="{DynamicResource MaterialDesign.Brush.Primary.Light}" /> Grid.Row="2"
</DataTrigger> Grid.Column="0"
</Style.Triggers> Margin="{StaticResource Margin4}"
</Style> VerticalAlignment="Center"
</DataGrid.Resources> Style="{StaticResource ToolbarTextBlock}">
<DataGrid.Columns> <Hyperlink Click="linkdomainStrategy4Singbox_Click">
<DataGridTextColumn <TextBlock Text="{x:Static resx:ResUI.TbdomainStrategy4Singbox}" />
Width="*" <materialDesign:PackIcon Kind="Link" />
Binding="{Binding Remarks}" </Hyperlink>
Header="{x:Static resx:ResUI.LvRemarks}" /> </TextBlock>
<DataGridTextColumn <ComboBox
Width="60" x:Name="cmbdomainStrategy4Singbox"
Binding="{Binding RuleNum}" Grid.Row="2"
Header="{x:Static resx:ResUI.LvCount}" /> Grid.Column="1"
<DataGridTextColumn Width="300"
Width="60" Margin="{StaticResource Margin4}"
Binding="{Binding Sort}" Style="{StaticResource DefComboBox}" />
Header="{x:Static resx:ResUI.LvSort}" /> </Grid>
<DataGridTextColumn
Width="*" <TabControl x:Name="tabAdvanced">
Binding="{Binding Url}" <TabItem HorizontalAlignment="Left" Header="{x:Static resx:ResUI.TbRoutingTabRuleList}">
Header="{x:Static resx:ResUI.LvUrl}" /> <DataGrid
<DataGridTextColumn x:Name="lstRoutings"
Width="300" AutoGenerateColumns="False"
Binding="{Binding CustomIcon}" BorderThickness="1"
Header="{x:Static resx:ResUI.LvCustomIcon}" /> CanUserAddRows="False"
</DataGrid.Columns> CanUserResizeRows="False"
</DataGrid> CanUserSortColumns="False"
</TabItem> EnableRowVirtualization="True"
</TabControl> GridLinesVisibility="All"
</DockPanel> HeadersVisibility="Column"
IsReadOnly="True"
Style="{StaticResource DefDataGrid}">
<DataGrid.ContextMenu>
<ContextMenu Style="{StaticResource DefContextMenu}">
<MenuItem
x:Name="menuRoutingAdvancedAdd"
Height="{StaticResource MenuItemHeight}"
Header="{x:Static resx:ResUI.menuRoutingAdvancedAdd}" />
<MenuItem
x:Name="menuRoutingAdvancedRemove"
Height="{StaticResource MenuItemHeight}"
Header="{x:Static resx:ResUI.menuRoutingAdvancedRemove}" />
<MenuItem
x:Name="menuRoutingAdvancedSelectAll"
Height="{StaticResource MenuItemHeight}"
Header="{x:Static resx:ResUI.menuSelectAll}" />
<MenuItem
x:Name="menuRoutingAdvancedSetDefault"
Height="{StaticResource MenuItemHeight}"
Header="{x:Static resx:ResUI.menuRoutingAdvancedSetDefault}" />
<Separator />
<MenuItem
x:Name="menuRoutingAdvancedImportRules"
Height="{StaticResource MenuItemHeight}"
Header="{x:Static resx:ResUI.menuRoutingAdvancedImportRules}" />
</ContextMenu>
</DataGrid.ContextMenu>
<DataGrid.Resources>
<Style BasedOn="{StaticResource MaterialDesignDataGridCell}" TargetType="DataGridCell">
<Style.Triggers>
<DataTrigger Binding="{Binding IsActive}" Value="True">
<Setter Property="Background" Value="{DynamicResource MaterialDesign.Brush.Primary.Light}" />
<Setter Property="Foreground" Value="Black" />
<Setter Property="BorderBrush" Value="{DynamicResource MaterialDesign.Brush.Primary.Light}" />
</DataTrigger>
</Style.Triggers>
</Style>
</DataGrid.Resources>
<DataGrid.Columns>
<DataGridTextColumn
Width="*"
Binding="{Binding Remarks}"
Header="{x:Static resx:ResUI.LvRemarks}" />
<DataGridTextColumn
Width="60"
Binding="{Binding RuleNum}"
Header="{x:Static resx:ResUI.LvCount}" />
<DataGridTextColumn
Width="60"
Binding="{Binding Sort}"
Header="{x:Static resx:ResUI.LvSort}" />
<DataGridTextColumn
Width="*"
Binding="{Binding Url}"
Header="{x:Static resx:ResUI.LvUrl}" />
<DataGridTextColumn
Width="300"
Binding="{Binding CustomIcon}"
Header="{x:Static resx:ResUI.LvCustomIcon}" />
</DataGrid.Columns>
</DataGrid>
</TabItem>
</TabControl>
</DockPanel> </DockPanel>
</reactiveui:ReactiveWindow> </reactiveui:ReactiveWindow>