This commit is contained in:
YsLtr 2026-03-25 16:43:25 +08:00 committed by GitHub
commit d8ca5f9800
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
19 changed files with 605 additions and 40 deletions

View file

@ -156,7 +156,7 @@ public class ProfilesViewModel : MyReactiveObject
{ {
await MoveServer(EMove.Bottom); await MoveServer(EMove.Bottom);
}, canEditRemove); }, canEditRemove);
MoveToGroupCmd = ReactiveCommand.CreateFromTask<SubItem>(async sub => MoveToGroupCmd = ReactiveCommand.Create<SubItem>(sub =>
{ {
SelectedMoveToGroup = sub; SelectedMoveToGroup = sub;
}); });

View file

@ -22,6 +22,24 @@
<StyleInclude Source="Assets/GlobalStyles.axaml" /> <StyleInclude Source="Assets/GlobalStyles.axaml" />
<StyleInclude Source="avares://Semi.Avalonia.DataGrid/Index.axaml" /> <StyleInclude Source="avares://Semi.Avalonia.DataGrid/Index.axaml" />
<dialogHost:DialogHostStyles /> <dialogHost:DialogHostStyles />
<Style Selector="Border.windowTitleBar">
<Setter Property="Background" Value="Transparent" />
<Setter Property="BorderBrush" Value="{DynamicResource ButtonDefaultTertiaryForeground}" />
<Setter Property="BorderThickness" Value="0,0,0,1" />
</Style>
<Style Selector="Button.windowTitleBarButton">
<Setter Property="Width" Value="36" />
<Setter Property="Height" Value="32" />
<Setter Property="MinWidth" Value="36" />
<Setter Property="Padding" Value="0" />
<Setter Property="Theme" Value="{DynamicResource BorderlessButton}" />
</Style>
<Style Selector="TextBlock.windowTitleBarGlyph">
<Setter Property="FontSize" Value="14" />
<Setter Property="Foreground" Value="{DynamicResource ButtonDefaultTertiaryForeground}" />
<Setter Property="HorizontalAlignment" Value="Center" />
<Setter Property="VerticalAlignment" Value="Center" />
</Style>
</Application.Styles> </Application.Styles>
<TrayIcon.Icons> <TrayIcon.Icons>

View file

@ -2,8 +2,17 @@ namespace v2rayN.Desktop.Base;
public class WindowBase<TViewModel> : ReactiveWindow<TViewModel> where TViewModel : class public class WindowBase<TViewModel> : ReactiveWindow<TViewModel> where TViewModel : class
{ {
private Border? _linuxTitleBar;
private Control? _linuxTitleBarDragRegion;
private Button? _linuxTitleBarCloseButton;
public WindowBase() public WindowBase()
{ {
if (Utils.IsLinux())
{
SystemDecorations = SystemDecorations.BorderOnly;
}
Loaded += OnLoaded; Loaded += OnLoaded;
} }
@ -34,10 +43,13 @@ public class WindowBase<TViewModel> : ReactiveWindow<TViewModel> where TViewMode
Position = new PixelPoint((int)x, (int)y); Position = new PixelPoint((int)x, (int)y);
} }
catch { } catch { }
ConfigureLinuxTitleBar();
} }
protected override void OnClosed(EventArgs e) protected override void OnClosed(EventArgs e)
{ {
ReleaseLinuxTitleBar();
base.OnClosed(e); base.OnClosed(e);
try try
{ {
@ -45,4 +57,67 @@ public class WindowBase<TViewModel> : ReactiveWindow<TViewModel> where TViewMode
} }
catch { } catch { }
} }
protected virtual void HandleLinuxTitleBarClose()
{
Close();
}
private void ConfigureLinuxTitleBar()
{
if (!Utils.IsLinux())
{
return;
}
_linuxTitleBar ??= this.FindControl<Border>("linuxTitleBar");
if (_linuxTitleBar == null)
{
return;
}
_linuxTitleBar.IsVisible = true;
_linuxTitleBarDragRegion ??= this.FindControl<Control>("linuxTitleBarDragRegion");
if (_linuxTitleBarDragRegion != null)
{
_linuxTitleBarDragRegion.PointerPressed -= LinuxTitleBar_PointerPressed;
_linuxTitleBarDragRegion.PointerPressed += LinuxTitleBar_PointerPressed;
}
_linuxTitleBarCloseButton ??= this.FindControl<Button>("btnLinuxClose");
if (_linuxTitleBarCloseButton != null)
{
_linuxTitleBarCloseButton.Click -= LinuxTitleBarClose_Click;
_linuxTitleBarCloseButton.Click += LinuxTitleBarClose_Click;
}
}
private void ReleaseLinuxTitleBar()
{
if (_linuxTitleBarDragRegion != null)
{
_linuxTitleBarDragRegion.PointerPressed -= LinuxTitleBar_PointerPressed;
}
if (_linuxTitleBarCloseButton != null)
{
_linuxTitleBarCloseButton.Click -= LinuxTitleBarClose_Click;
}
}
private void LinuxTitleBar_PointerPressed(object? sender, PointerPressedEventArgs e)
{
if (e.GetCurrentPoint(this).Properties.IsLeftButtonPressed == false)
{
return;
}
BeginMoveDrag(e);
}
private void LinuxTitleBarClose_Click(object? sender, RoutedEventArgs e)
{
HandleLinuxTitleBarClose();
}
} }

View file

@ -1,5 +1,6 @@
using Avalonia.Platform.Storage; using Avalonia.Platform.Storage;
using MsBox.Avalonia; using MsBox.Avalonia;
using MsBox.Avalonia.Dto;
namespace v2rayN.Desktop.Common; namespace v2rayN.Desktop.Common;
@ -9,7 +10,17 @@ internal class UI
public static async Task<ButtonResult> ShowYesNo(Window owner, string msg) public static async Task<ButtonResult> ShowYesNo(Window owner, string msg)
{ {
var box = MessageBoxManager.GetMessageBoxStandard(caption, msg, ButtonEnum.YesNo); var messageBoxParams = new MessageBoxStandardParams
{
ContentTitle = caption,
ContentMessage = msg,
ButtonDefinitions = ButtonEnum.YesNo,
WindowStartupLocation = WindowStartupLocation.CenterOwner,
CanResize = false,
Topmost = false,
SystemDecorations = Utils.IsLinux() ? SystemDecorations.BorderOnly : SystemDecorations.Full
};
var box = MessageBoxManager.GetMessageBoxStandard(messageBoxParams);
return await box.ShowWindowDialogAsync(owner); return await box.ShowWindowDialogAsync(owner);
} }

View file

@ -13,8 +13,37 @@
ShowInTaskbar="False" ShowInTaskbar="False"
WindowStartupLocation="CenterScreen" WindowStartupLocation="CenterScreen"
mc:Ignorable="d"> mc:Ignorable="d">
<Grid RowDefinitions="Auto,*">
<DockPanel Margin="{StaticResource Margin8}"> <Border
x:Name="linuxTitleBar"
Classes="windowTitleBar"
IsVisible="False">
<Grid ColumnDefinitions="Auto,*,Auto" Height="36">
<Border
x:Name="linuxTitleBarDragRegion"
Grid.ColumnSpan="2"
Background="Transparent" />
<StackPanel
Grid.Column="0"
Margin="12,0,0,0"
Orientation="Horizontal"
Spacing="8">
<Image
Width="16"
Height="16"
Source="/Assets/NotifyIcon1.ico" />
<TextBlock
VerticalAlignment="Center"
Text="{Binding Title, RelativeSource={RelativeSource AncestorType=Window}}" />
</StackPanel>
<StackPanel Grid.Column="2" Orientation="Horizontal">
<Button x:Name="btnLinuxClose" Classes="windowTitleBarButton">
<TextBlock Classes="windowTitleBarGlyph" Text="×" />
</Button>
</StackPanel>
</Grid>
</Border>
<DockPanel Grid.Row="1" Margin="{StaticResource Margin8}">
<StackPanel <StackPanel
Margin="{StaticResource Margin4}" Margin="{StaticResource Margin4}"
HorizontalAlignment="Center" HorizontalAlignment="Center"
@ -252,5 +281,6 @@
</DataGrid> </DataGrid>
</TabItem> </TabItem>
</TabControl> </TabControl>
</DockPanel> </DockPanel>
</Grid>
</Window> </Window>

View file

@ -13,7 +13,37 @@
ShowInTaskbar="False" ShowInTaskbar="False"
WindowStartupLocation="CenterScreen" WindowStartupLocation="CenterScreen"
mc:Ignorable="d"> mc:Ignorable="d">
<DockPanel Margin="{StaticResource Margin8}"> <Grid RowDefinitions="Auto,*">
<Border
x:Name="linuxTitleBar"
Classes="windowTitleBar"
IsVisible="False">
<Grid ColumnDefinitions="Auto,*,Auto" Height="36">
<Border
x:Name="linuxTitleBarDragRegion"
Grid.ColumnSpan="2"
Background="Transparent" />
<StackPanel
Grid.Column="0"
Margin="12,0,0,0"
Orientation="Horizontal"
Spacing="8">
<Image
Width="16"
Height="16"
Source="/Assets/NotifyIcon1.ico" />
<TextBlock
VerticalAlignment="Center"
Text="{Binding Title, RelativeSource={RelativeSource AncestorType=Window}}" />
</StackPanel>
<StackPanel Grid.Column="2" Orientation="Horizontal">
<Button x:Name="btnLinuxClose" Classes="windowTitleBarButton">
<TextBlock Classes="windowTitleBarGlyph" Text="×" />
</Button>
</StackPanel>
</Grid>
</Border>
<DockPanel Grid.Row="1" Margin="{StaticResource Margin8}">
<StackPanel <StackPanel
Margin="{StaticResource Margin4}" Margin="{StaticResource Margin4}"
HorizontalAlignment="Center" HorizontalAlignment="Center"
@ -154,5 +184,6 @@
</StackPanel> </StackPanel>
</Grid> </Grid>
</ScrollViewer> </ScrollViewer>
</DockPanel> </DockPanel>
</Grid>
</Window> </Window>

View file

@ -14,7 +14,37 @@
ShowInTaskbar="False" ShowInTaskbar="False"
WindowStartupLocation="CenterScreen" WindowStartupLocation="CenterScreen"
mc:Ignorable="d"> mc:Ignorable="d">
<DockPanel Margin="{StaticResource Margin8}"> <Grid RowDefinitions="Auto,*">
<Border
x:Name="linuxTitleBar"
Classes="windowTitleBar"
IsVisible="False">
<Grid ColumnDefinitions="Auto,*,Auto" Height="36">
<Border
x:Name="linuxTitleBarDragRegion"
Grid.ColumnSpan="2"
Background="Transparent" />
<StackPanel
Grid.Column="0"
Margin="12,0,0,0"
Orientation="Horizontal"
Spacing="8">
<Image
Width="16"
Height="16"
Source="/Assets/NotifyIcon1.ico" />
<TextBlock
VerticalAlignment="Center"
Text="{Binding Title, RelativeSource={RelativeSource AncestorType=Window}}" />
</StackPanel>
<StackPanel Grid.Column="2" Orientation="Horizontal">
<Button x:Name="btnLinuxClose" Classes="windowTitleBarButton">
<TextBlock Classes="windowTitleBarGlyph" Text="×" />
</Button>
</StackPanel>
</Grid>
</Border>
<DockPanel Grid.Row="1" Margin="{StaticResource Margin8}">
<StackPanel <StackPanel
Margin="{StaticResource Margin4}" Margin="{StaticResource Margin4}"
HorizontalAlignment="Center" HorizontalAlignment="Center"
@ -1131,5 +1161,6 @@
<Separator Grid.Row="9" Margin="{StaticResource MarginTb8}" /> <Separator Grid.Row="9" Margin="{StaticResource MarginTb8}" />
</Grid> </Grid>
</ScrollViewer> </ScrollViewer>
</DockPanel> </DockPanel>
</Grid>
</Window> </Window>

View file

@ -14,7 +14,37 @@
ShowInTaskbar="False" ShowInTaskbar="False"
WindowStartupLocation="CenterScreen" WindowStartupLocation="CenterScreen"
mc:Ignorable="d"> mc:Ignorable="d">
<DockPanel Margin="{StaticResource Margin8}"> <Grid RowDefinitions="Auto,*">
<Border
x:Name="linuxTitleBar"
Classes="windowTitleBar"
IsVisible="False">
<Grid ColumnDefinitions="Auto,*,Auto" Height="36">
<Border
x:Name="linuxTitleBarDragRegion"
Grid.ColumnSpan="2"
Background="Transparent" />
<StackPanel
Grid.Column="0"
Margin="12,0,0,0"
Orientation="Horizontal"
Spacing="8">
<Image
Width="16"
Height="16"
Source="/Assets/NotifyIcon1.ico" />
<TextBlock
VerticalAlignment="Center"
Text="{Binding Title, RelativeSource={RelativeSource AncestorType=Window}}" />
</StackPanel>
<StackPanel Grid.Column="2" Orientation="Horizontal">
<Button x:Name="btnLinuxClose" Classes="windowTitleBarButton">
<TextBlock Classes="windowTitleBarGlyph" Text="×" />
</Button>
</StackPanel>
</Grid>
</Border>
<DockPanel Grid.Row="1" Margin="{StaticResource Margin8}">
<StackPanel <StackPanel
Margin="{StaticResource Margin4}" Margin="{StaticResource Margin4}"
HorizontalAlignment="Center" HorizontalAlignment="Center"
@ -486,5 +516,6 @@
</DockPanel> </DockPanel>
</TabItem> </TabItem>
</TabControl> </TabControl>
</DockPanel> </DockPanel>
</Grid>
</Window> </Window>

View file

@ -14,7 +14,37 @@
ShowInTaskbar="False" ShowInTaskbar="False"
WindowStartupLocation="CenterScreen" WindowStartupLocation="CenterScreen"
mc:Ignorable="d"> mc:Ignorable="d">
<DockPanel Margin="{StaticResource Margin8}"> <Grid RowDefinitions="Auto,*">
<Border
x:Name="linuxTitleBar"
Classes="windowTitleBar"
IsVisible="False">
<Grid ColumnDefinitions="Auto,*,Auto" Height="36">
<Border
x:Name="linuxTitleBarDragRegion"
Grid.ColumnSpan="2"
Background="Transparent" />
<StackPanel
Grid.Column="0"
Margin="12,0,0,0"
Orientation="Horizontal"
Spacing="8">
<Image
Width="16"
Height="16"
Source="/Assets/NotifyIcon1.ico" />
<TextBlock
VerticalAlignment="Center"
Text="{Binding Title, RelativeSource={RelativeSource AncestorType=Window}}" />
</StackPanel>
<StackPanel Grid.Column="2" Orientation="Horizontal">
<Button x:Name="btnLinuxClose" Classes="windowTitleBarButton">
<TextBlock Classes="windowTitleBarGlyph" Text="×" />
</Button>
</StackPanel>
</Grid>
</Border>
<DockPanel Grid.Row="1" Margin="{StaticResource Margin8}">
<StackPanel <StackPanel
Margin="{StaticResource Margin4}" Margin="{StaticResource Margin4}"
HorizontalAlignment="Center" HorizontalAlignment="Center"
@ -178,5 +208,6 @@
</DockPanel> </DockPanel>
</TabItem> </TabItem>
</TabControl> </TabControl>
</DockPanel> </DockPanel>
</Grid>
</Window> </Window>

View file

@ -13,7 +13,37 @@
ShowInTaskbar="False" ShowInTaskbar="False"
WindowStartupLocation="CenterScreen" WindowStartupLocation="CenterScreen"
mc:Ignorable="d"> mc:Ignorable="d">
<DockPanel Margin="{StaticResource Margin8}"> <Grid RowDefinitions="Auto,*">
<Border
x:Name="linuxTitleBar"
Classes="windowTitleBar"
IsVisible="False">
<Grid ColumnDefinitions="Auto,*,Auto" Height="36">
<Border
x:Name="linuxTitleBarDragRegion"
Grid.ColumnSpan="2"
Background="Transparent" />
<StackPanel
Grid.Column="0"
Margin="12,0,0,0"
Orientation="Horizontal"
Spacing="8">
<Image
Width="16"
Height="16"
Source="/Assets/NotifyIcon1.ico" />
<TextBlock
VerticalAlignment="Center"
Text="{Binding Title, RelativeSource={RelativeSource AncestorType=Window}}" />
</StackPanel>
<StackPanel Grid.Column="2" Orientation="Horizontal">
<Button x:Name="btnLinuxClose" Classes="windowTitleBarButton">
<TextBlock Classes="windowTitleBarGlyph" Text="×" />
</Button>
</StackPanel>
</Grid>
</Border>
<DockPanel Grid.Row="1" Margin="{StaticResource Margin8}">
<StackPanel <StackPanel
Margin="{StaticResource Margin4}" Margin="{StaticResource Margin4}"
HorizontalAlignment="Center" HorizontalAlignment="Center"
@ -127,5 +157,6 @@
Text="{x:Static resx:ResUI.TbGlobalHotkeySettingTip}" /> Text="{x:Static resx:ResUI.TbGlobalHotkeySettingTip}" />
</Grid> </Grid>
</ScrollViewer> </ScrollViewer>
</DockPanel> </DockPanel>
</Grid>
</Window> </Window>

View file

@ -8,6 +8,7 @@
xmlns:resx="clr-namespace:ServiceLib.Resx;assembly=ServiceLib" xmlns:resx="clr-namespace:ServiceLib.Resx;assembly=ServiceLib"
xmlns:view="using:v2rayN.Desktop.Views" xmlns:view="using:v2rayN.Desktop.Views"
xmlns:vms="clr-namespace:ServiceLib.ViewModels;assembly=ServiceLib" xmlns:vms="clr-namespace:ServiceLib.ViewModels;assembly=ServiceLib"
x:Name="mainWindow"
Title="v2rayN" Title="v2rayN"
Width="1200" Width="1200"
Height="800" Height="800"
@ -21,7 +22,43 @@
Background="Gray" Background="Gray"
CloseOnClickAway="True" CloseOnClickAway="True"
DisableOpeningAnimation="True"> DisableOpeningAnimation="True">
<DockPanel> <DockPanel LastChildFill="True">
<Border
x:Name="linuxTitleBar"
Classes="windowTitleBar"
DockPanel.Dock="Top"
IsVisible="False">
<Grid ColumnDefinitions="Auto,*,Auto" Height="36">
<Border
x:Name="linuxTitleBarDragRegion"
Grid.ColumnSpan="2"
Background="Transparent" />
<StackPanel
Grid.Column="0"
Margin="12,0,0,0"
Orientation="Horizontal"
Spacing="8">
<Image
Width="16"
Height="16"
Source="/Assets/NotifyIcon1.ico" />
<TextBlock
VerticalAlignment="Center"
Text="{Binding Title, ElementName=mainWindow}" />
</StackPanel>
<StackPanel
Grid.Column="2"
Orientation="Horizontal">
<Button
x:Name="btnLinuxClose"
Classes="windowTitleBarButton">
<TextBlock Classes="windowTitleBarGlyph" Text="×" />
</Button>
</StackPanel>
</Grid>
</Border>
<DockPanel Margin="{StaticResource Margin8}" DockPanel.Dock="Top"> <DockPanel Margin="{StaticResource Margin8}" DockPanel.Dock="Top">
<ContentControl x:Name="conTheme" DockPanel.Dock="Right" /> <ContentControl x:Name="conTheme" DockPanel.Dock="Right" />
<Menu Margin="{StaticResource Margin4}"> <Menu Margin="{StaticResource Margin4}">

View file

@ -280,7 +280,14 @@ public partial class MainWindow : WindowBase<MainWindowViewModel>
{ {
case WindowCloseReason.OwnerWindowClosing or WindowCloseReason.WindowClosing: case WindowCloseReason.OwnerWindowClosing or WindowCloseReason.WindowClosing:
e.Cancel = true; e.Cancel = true;
ShowHideWindow(false); if (Utils.IsLinux())
{
HideToTray();
}
else
{
ShowHideWindow(false);
}
break; break;
case WindowCloseReason.ApplicationShutdown or WindowCloseReason.OSShutdown: case WindowCloseReason.ApplicationShutdown or WindowCloseReason.OSShutdown:
@ -388,6 +395,22 @@ public partial class MainWindow : WindowBase<MainWindowViewModel>
await AppManager.Instance.AppExitAsync(true); await AppManager.Instance.AppExitAsync(true);
} }
protected override void HandleLinuxTitleBarClose()
{
HideToTray();
}
private void HideToTray()
{
foreach (var ownedWindow in OwnedWindows)
{
ownedWindow.Close();
}
Hide();
AppManager.Instance.ShowInTaskbar = false;
}
private void Shutdown(bool obj) private void Shutdown(bool obj)
{ {
if (obj is bool b && _blCloseByUser == false) if (obj is bool b && _blCloseByUser == false)
@ -426,7 +449,7 @@ public partial class MainWindow : WindowBase<MainWindowViewModel>
{ {
if (Utils.IsLinux() && _config.UiItem.Hide2TrayWhenClose == false) if (Utils.IsLinux() && _config.UiItem.Hide2TrayWhenClose == false)
{ {
WindowState = WindowState.Minimized; HideToTray();
return; return;
} }

View file

@ -13,7 +13,37 @@
ShowInTaskbar="False" ShowInTaskbar="False"
WindowStartupLocation="CenterScreen" WindowStartupLocation="CenterScreen"
mc:Ignorable="d"> mc:Ignorable="d">
<DockPanel Margin="{StaticResource Margin8}"> <Grid RowDefinitions="Auto,*">
<Border
x:Name="linuxTitleBar"
Classes="windowTitleBar"
IsVisible="False">
<Grid ColumnDefinitions="Auto,*,Auto" Height="36">
<Border
x:Name="linuxTitleBarDragRegion"
Grid.ColumnSpan="2"
Background="Transparent" />
<StackPanel
Grid.Column="0"
Margin="12,0,0,0"
Orientation="Horizontal"
Spacing="8">
<Image
Width="16"
Height="16"
Source="/Assets/NotifyIcon1.ico" />
<TextBlock
VerticalAlignment="Center"
Text="{Binding Title, RelativeSource={RelativeSource AncestorType=Window}}" />
</StackPanel>
<StackPanel Grid.Column="2" Orientation="Horizontal">
<Button x:Name="btnLinuxClose" Classes="windowTitleBarButton">
<TextBlock Classes="windowTitleBarGlyph" Text="×" />
</Button>
</StackPanel>
</Grid>
</Border>
<DockPanel Grid.Row="1" Margin="{StaticResource Margin8}">
<StackPanel <StackPanel
Margin="{StaticResource Margin4}" Margin="{StaticResource Margin4}"
HorizontalAlignment="Center" HorizontalAlignment="Center"
@ -965,5 +995,6 @@
</Grid> </Grid>
</TabItem> </TabItem>
</TabControl> </TabControl>
</DockPanel> </DockPanel>
</Grid>
</Window> </Window>

View file

@ -12,8 +12,37 @@
x:DataType="vms:ProfilesSelectViewModel" x:DataType="vms:ProfilesSelectViewModel"
WindowStartupLocation="CenterScreen" WindowStartupLocation="CenterScreen"
mc:Ignorable="d"> mc:Ignorable="d">
<Grid RowDefinitions="Auto,*">
<DockPanel Margin="8"> <Border
x:Name="linuxTitleBar"
Classes="windowTitleBar"
IsVisible="False">
<Grid ColumnDefinitions="Auto,*,Auto" Height="36">
<Border
x:Name="linuxTitleBarDragRegion"
Grid.ColumnSpan="2"
Background="Transparent" />
<StackPanel
Grid.Column="0"
Margin="12,0,0,0"
Orientation="Horizontal"
Spacing="8">
<Image
Width="16"
Height="16"
Source="/Assets/NotifyIcon1.ico" />
<TextBlock
VerticalAlignment="Center"
Text="{Binding Title, RelativeSource={RelativeSource AncestorType=Window}}" />
</StackPanel>
<StackPanel Grid.Column="2" Orientation="Horizontal">
<Button x:Name="btnLinuxClose" Classes="windowTitleBarButton">
<TextBlock Classes="windowTitleBarGlyph" Text="×" />
</Button>
</StackPanel>
</Grid>
</Border>
<DockPanel Grid.Row="1" Margin="8">
<!-- Bottom buttons --> <!-- Bottom buttons -->
<StackPanel <StackPanel
Margin="4" Margin="4"
@ -123,5 +152,6 @@
</DataGrid> </DataGrid>
</DockPanel> </DockPanel>
</Grid> </Grid>
</DockPanel> </DockPanel>
</Grid>
</Window> </Window>

View file

@ -13,7 +13,37 @@
ShowInTaskbar="False" ShowInTaskbar="False"
WindowStartupLocation="CenterScreen" WindowStartupLocation="CenterScreen"
mc:Ignorable="d"> mc:Ignorable="d">
<DockPanel> <Grid RowDefinitions="Auto,*">
<Border
x:Name="linuxTitleBar"
Classes="windowTitleBar"
IsVisible="False">
<Grid ColumnDefinitions="Auto,*,Auto" Height="36">
<Border
x:Name="linuxTitleBarDragRegion"
Grid.ColumnSpan="2"
Background="Transparent" />
<StackPanel
Grid.Column="0"
Margin="12,0,0,0"
Orientation="Horizontal"
Spacing="8">
<Image
Width="16"
Height="16"
Source="/Assets/NotifyIcon1.ico" />
<TextBlock
VerticalAlignment="Center"
Text="{Binding Title, RelativeSource={RelativeSource AncestorType=Window}}" />
</StackPanel>
<StackPanel Grid.Column="2" Orientation="Horizontal">
<Button x:Name="btnLinuxClose" Classes="windowTitleBarButton">
<TextBlock Classes="windowTitleBarGlyph" Text="×" />
</Button>
</StackPanel>
</Grid>
</Border>
<DockPanel Grid.Row="1">
<Grid <Grid
Margin="{StaticResource Margin4}" Margin="{StaticResource Margin4}"
ColumnDefinitions="Auto,Auto,Auto" ColumnDefinitions="Auto,Auto,Auto"
@ -250,5 +280,6 @@
TextWrapping="Wrap" /> TextWrapping="Wrap" />
</HeaderedContentControl> </HeaderedContentControl>
</Grid> </Grid>
</DockPanel> </DockPanel>
</Grid>
</Window> </Window>

View file

@ -13,7 +13,37 @@
ShowInTaskbar="False" ShowInTaskbar="False"
WindowStartupLocation="CenterScreen" WindowStartupLocation="CenterScreen"
mc:Ignorable="d"> mc:Ignorable="d">
<DockPanel> <Grid RowDefinitions="Auto,*">
<Border
x:Name="linuxTitleBar"
Classes="windowTitleBar"
IsVisible="False">
<Grid ColumnDefinitions="Auto,*,Auto" Height="36">
<Border
x:Name="linuxTitleBarDragRegion"
Grid.ColumnSpan="2"
Background="Transparent" />
<StackPanel
Grid.Column="0"
Margin="12,0,0,0"
Orientation="Horizontal"
Spacing="8">
<Image
Width="16"
Height="16"
Source="/Assets/NotifyIcon1.ico" />
<TextBlock
VerticalAlignment="Center"
Text="{Binding Title, RelativeSource={RelativeSource AncestorType=Window}}" />
</StackPanel>
<StackPanel Grid.Column="2" Orientation="Horizontal">
<Button x:Name="btnLinuxClose" Classes="windowTitleBarButton">
<TextBlock Classes="windowTitleBarGlyph" Text="×" />
</Button>
</StackPanel>
</Grid>
</Border>
<DockPanel Grid.Row="1">
<Menu Margin="{StaticResource Margin4}" DockPanel.Dock="Top"> <Menu Margin="{StaticResource Margin4}" DockPanel.Dock="Top">
<MenuItem x:Name="menuRuleAdd" Header="{x:Static resx:ResUI.menuRuleAdd}" /> <MenuItem x:Name="menuRuleAdd" Header="{x:Static resx:ResUI.menuRuleAdd}" />
<MenuItem x:Name="menuImportRulesFromFile" Header="{x:Static resx:ResUI.menuImportRulesFromFile}" /> <MenuItem x:Name="menuImportRulesFromFile" Header="{x:Static resx:ResUI.menuImportRulesFromFile}" />
@ -253,5 +283,6 @@
</DataGrid> </DataGrid>
</TabItem> </TabItem>
</TabControl> </TabControl>
</DockPanel> </DockPanel>
</Grid>
</Window> </Window>

View file

@ -13,8 +13,37 @@
ShowInTaskbar="False" ShowInTaskbar="False"
WindowStartupLocation="CenterScreen" WindowStartupLocation="CenterScreen"
mc:Ignorable="d"> mc:Ignorable="d">
<Grid RowDefinitions="Auto,*">
<DockPanel> <Border
x:Name="linuxTitleBar"
Classes="windowTitleBar"
IsVisible="False">
<Grid ColumnDefinitions="Auto,*,Auto" Height="36">
<Border
x:Name="linuxTitleBarDragRegion"
Grid.ColumnSpan="2"
Background="Transparent" />
<StackPanel
Grid.Column="0"
Margin="12,0,0,0"
Orientation="Horizontal"
Spacing="8">
<Image
Width="16"
Height="16"
Source="/Assets/NotifyIcon1.ico" />
<TextBlock
VerticalAlignment="Center"
Text="{Binding Title, RelativeSource={RelativeSource AncestorType=Window}}" />
</StackPanel>
<StackPanel Grid.Column="2" Orientation="Horizontal">
<Button x:Name="btnLinuxClose" Classes="windowTitleBarButton">
<TextBlock Classes="windowTitleBarGlyph" Text="×" />
</Button>
</StackPanel>
</Grid>
</Border>
<DockPanel Grid.Row="1">
<Menu Margin="{StaticResource Margin4}" DockPanel.Dock="Top"> <Menu Margin="{StaticResource Margin4}" DockPanel.Dock="Top">
<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}" />
@ -138,5 +167,6 @@
</DataGrid> </DataGrid>
</TabItem> </TabItem>
</TabControl> </TabControl>
</DockPanel> </DockPanel>
</Grid>
</Window> </Window>

View file

@ -12,7 +12,37 @@
ShowInTaskbar="False" ShowInTaskbar="False"
WindowStartupLocation="CenterScreen" WindowStartupLocation="CenterScreen"
mc:Ignorable="d"> mc:Ignorable="d">
<DockPanel Margin="{StaticResource Margin8}"> <Grid RowDefinitions="Auto,*">
<Border
x:Name="linuxTitleBar"
Classes="windowTitleBar"
IsVisible="False">
<Grid ColumnDefinitions="Auto,*,Auto" Height="36">
<Border
x:Name="linuxTitleBarDragRegion"
Grid.ColumnSpan="2"
Background="Transparent" />
<StackPanel
Grid.Column="0"
Margin="12,0,0,0"
Orientation="Horizontal"
Spacing="8">
<Image
Width="16"
Height="16"
Source="/Assets/NotifyIcon1.ico" />
<TextBlock
VerticalAlignment="Center"
Text="{Binding Title, RelativeSource={RelativeSource AncestorType=Window}}" />
</StackPanel>
<StackPanel Grid.Column="2" Orientation="Horizontal">
<Button x:Name="btnLinuxClose" Classes="windowTitleBarButton">
<TextBlock Classes="windowTitleBarGlyph" Text="×" />
</Button>
</StackPanel>
</Grid>
</Border>
<DockPanel Grid.Row="1" Margin="{StaticResource Margin8}">
<StackPanel <StackPanel
Margin="{StaticResource Margin4}" Margin="{StaticResource Margin4}"
HorizontalAlignment="Center" HorizontalAlignment="Center"
@ -266,5 +296,6 @@
</Grid> </Grid>
</ScrollViewer> </ScrollViewer>
</DockPanel> </DockPanel>
</Grid>
</Window> </Window>

View file

@ -14,12 +14,43 @@
ShowInTaskbar="False" ShowInTaskbar="False"
WindowStartupLocation="CenterScreen" WindowStartupLocation="CenterScreen"
mc:Ignorable="d"> mc:Ignorable="d">
<dialogHost:DialogHost <Grid RowDefinitions="Auto,*">
Background="Gray" <Border
CloseOnClickAway="True" x:Name="linuxTitleBar"
DisableOpeningAnimation="True" Classes="windowTitleBar"
Identifier="dialogHostSub"> IsVisible="False">
<DockPanel Margin="{StaticResource Margin8}"> <Grid ColumnDefinitions="Auto,*,Auto" Height="36">
<Border
x:Name="linuxTitleBarDragRegion"
Grid.ColumnSpan="2"
Background="Transparent" />
<StackPanel
Grid.Column="0"
Margin="12,0,0,0"
Orientation="Horizontal"
Spacing="8">
<Image
Width="16"
Height="16"
Source="/Assets/NotifyIcon1.ico" />
<TextBlock
VerticalAlignment="Center"
Text="{Binding Title, RelativeSource={RelativeSource AncestorType=Window}}" />
</StackPanel>
<StackPanel Grid.Column="2" Orientation="Horizontal">
<Button x:Name="btnLinuxClose" Classes="windowTitleBarButton">
<TextBlock Classes="windowTitleBarGlyph" Text="×" />
</Button>
</StackPanel>
</Grid>
</Border>
<dialogHost:DialogHost
Grid.Row="1"
Background="Gray"
CloseOnClickAway="True"
DisableOpeningAnimation="True"
Identifier="dialogHostSub">
<DockPanel Margin="{StaticResource Margin8}">
<Menu Margin="{StaticResource Margin4}" DockPanel.Dock="Top"> <Menu Margin="{StaticResource Margin4}" DockPanel.Dock="Top">
<MenuItem x:Name="menuSubAdd" Header="{x:Static resx:ResUI.menuSubAdd}" /> <MenuItem x:Name="menuSubAdd" Header="{x:Static resx:ResUI.menuSubAdd}" />
<MenuItem x:Name="menuSubDelete" Header="{x:Static resx:ResUI.menuSubDelete}" /> <MenuItem x:Name="menuSubDelete" Header="{x:Static resx:ResUI.menuSubDelete}" />
@ -75,6 +106,7 @@
Header="{x:Static resx:ResUI.LvSort}" /> Header="{x:Static resx:ResUI.LvSort}" />
</DataGrid.Columns> </DataGrid.Columns>
</DataGrid> </DataGrid>
</DockPanel> </DockPanel>
</dialogHost:DialogHost> </dialogHost:DialogHost>
</Grid>
</Window> </Window>