Compare commits

..

2 commits

Author SHA1 Message Date
DHR60
878c209218
Merge 8d61d6caaf into e970372a9f 2025-10-01 18:13:05 +08:00
DHR60
e970372a9f
Fix some minor UI bugs (#8053) 2025-10-01 16:47:22 +08:00
14 changed files with 63 additions and 55 deletions

View file

@ -3057,6 +3057,15 @@ namespace ServiceLib.Resx {
} }
} }
/// <summary>
/// 查找类似 Bootstrap DNS (sing-box) 的本地化字符串。
/// </summary>
public static string TbSBBootstrapDNS {
get {
return ResourceManager.GetString("TbSBBootstrapDNS", resourceCulture);
}
}
/// <summary> /// <summary>
/// 查找类似 sing-box Direct Resolution Strategy 的本地化字符串。 /// 查找类似 sing-box Direct Resolution Strategy 的本地化字符串。
/// </summary> /// </summary>
@ -3076,16 +3085,7 @@ namespace ServiceLib.Resx {
} }
/// <summary> /// <summary>
/// 查找类似 sing-box DoH Resolver Server 的本地化字符串。 /// 查找类似 Fallback DNS Resolution, Require IP 的本地化字符串。
/// </summary>
public static string TbSBDoHResolverServer {
get {
return ResourceManager.GetString("TbSBDoHResolverServer", resourceCulture);
}
}
/// <summary>
/// 查找类似 Fallback DNS Resolution, Suggest IP 的本地化字符串。
/// </summary> /// </summary>
public static string TbSBFallbackDNSResolve { public static string TbSBFallbackDNSResolve {
get { get {

View file

@ -1425,11 +1425,11 @@
<data name="TbSBOutboundDomainResolve" xml:space="preserve"> <data name="TbSBOutboundDomainResolve" xml:space="preserve">
<value>Resolve Outbound Domains</value> <value>Resolve Outbound Domains</value>
</data> </data>
<data name="TbSBDoHResolverServer" xml:space="preserve"> <data name="TbSBBootstrapDNS" xml:space="preserve">
<value>sing-box DoH Resolver Server</value> <value>Bootstrap DNS (sing-box)</value>
</data> </data>
<data name="TbSBFallbackDNSResolve" xml:space="preserve"> <data name="TbSBFallbackDNSResolve" xml:space="preserve">
<value>Fallback DNS Resolution, Suggest IP</value> <value>Fallback DNS Resolution, Require IP</value>
</data> </data>
<data name="TbXrayFreedomResolveStrategy" xml:space="preserve"> <data name="TbXrayFreedomResolveStrategy" xml:space="preserve">
<value>xray Freedom Resolution Strategy</value> <value>xray Freedom Resolution Strategy</value>

View file

@ -1425,11 +1425,11 @@
<data name="TbSBOutboundDomainResolve" xml:space="preserve"> <data name="TbSBOutboundDomainResolve" xml:space="preserve">
<value>Resolve Outbound Domains</value> <value>Resolve Outbound Domains</value>
</data> </data>
<data name="TbSBDoHResolverServer" xml:space="preserve"> <data name="TbSBBootstrapDNS" xml:space="preserve">
<value>sing-box DoH Resolver Server</value> <value>Bootstrap DNS (sing-box)</value>
</data> </data>
<data name="TbSBFallbackDNSResolve" xml:space="preserve"> <data name="TbSBFallbackDNSResolve" xml:space="preserve">
<value>Fallback DNS Resolution, Suggest IP</value> <value>Fallback DNS Resolution, Require IP</value>
</data> </data>
<data name="TbXrayFreedomResolveStrategy" xml:space="preserve"> <data name="TbXrayFreedomResolveStrategy" xml:space="preserve">
<value>xray Freedom Resolution Strategy</value> <value>xray Freedom Resolution Strategy</value>

View file

@ -1425,11 +1425,11 @@
<data name="TbSBOutboundDomainResolve" xml:space="preserve"> <data name="TbSBOutboundDomainResolve" xml:space="preserve">
<value>Resolve Outbound Domains</value> <value>Resolve Outbound Domains</value>
</data> </data>
<data name="TbSBDoHResolverServer" xml:space="preserve"> <data name="TbSBBootstrapDNS" xml:space="preserve">
<value>sing-box DoH Resolver Server</value> <value>Bootstrap DNS (sing-box)</value>
</data> </data>
<data name="TbSBFallbackDNSResolve" xml:space="preserve"> <data name="TbSBFallbackDNSResolve" xml:space="preserve">
<value>Fallback DNS Resolution, Suggest IP</value> <value>Fallback DNS Resolution, Require IP</value>
</data> </data>
<data name="TbXrayFreedomResolveStrategy" xml:space="preserve"> <data name="TbXrayFreedomResolveStrategy" xml:space="preserve">
<value>xray Freedom Resolution Strategy</value> <value>xray Freedom Resolution Strategy</value>

View file

@ -1425,11 +1425,11 @@
<data name="TbSBOutboundDomainResolve" xml:space="preserve"> <data name="TbSBOutboundDomainResolve" xml:space="preserve">
<value>Разрешать домены для исходящих соединений</value> <value>Разрешать домены для исходящих соединений</value>
</data> </data>
<data name="TbSBDoHResolverServer" xml:space="preserve"> <data name="TbSBBootstrapDNS" xml:space="preserve">
<value>Сервер DoH-резолвера (sing-box)</value> <value>Bootstrap DNS (sing-box)</value>
</data> </data>
<data name="TbSBFallbackDNSResolve" xml:space="preserve"> <data name="TbSBFallbackDNSResolve" xml:space="preserve">
<value>Резервное DNS-разрешение (рекомендуется указывать IP)</value> <value>Fallback DNS Resolution, Require IP</value>
</data> </data>
<data name="TbXrayFreedomResolveStrategy" xml:space="preserve"> <data name="TbXrayFreedomResolveStrategy" xml:space="preserve">
<value>Стратегия резолвинга Freedom (Xray)</value> <value>Стратегия резолвинга Freedom (Xray)</value>

View file

@ -1422,11 +1422,11 @@
<data name="TbSBOutboundDomainResolve" xml:space="preserve"> <data name="TbSBOutboundDomainResolve" xml:space="preserve">
<value>解析出站域名</value> <value>解析出站域名</value>
</data> </data>
<data name="TbSBDoHResolverServer" xml:space="preserve"> <data name="TbSBBootstrapDNS" xml:space="preserve">
<value>sing-box DoH 解析服务器</value> <value>Bootstrap DNS (sing-box)</value>
</data> </data>
<data name="TbSBFallbackDNSResolve" xml:space="preserve"> <data name="TbSBFallbackDNSResolve" xml:space="preserve">
<value>兜底解析其他 DNS 域名,建议设为 ip</value> <value>回退 DNS 解析,需指定为 IP</value>
</data> </data>
<data name="TbXrayFreedomResolveStrategy" xml:space="preserve"> <data name="TbXrayFreedomResolveStrategy" xml:space="preserve">
<value>xray freedom 解析策略</value> <value>xray freedom 解析策略</value>

View file

@ -1422,11 +1422,11 @@
<data name="TbSBOutboundDomainResolve" xml:space="preserve"> <data name="TbSBOutboundDomainResolve" xml:space="preserve">
<value>Resolve Outbound Domains</value> <value>Resolve Outbound Domains</value>
</data> </data>
<data name="TbSBDoHResolverServer" xml:space="preserve"> <data name="TbSBBootstrapDNS" xml:space="preserve">
<value>sing-box DoH Resolver Server</value> <value>Bootstrap DNS (sing-box)</value>
</data> </data>
<data name="TbSBFallbackDNSResolve" xml:space="preserve"> <data name="TbSBFallbackDNSResolve" xml:space="preserve">
<value>Fallback DNS Resolution, Suggest IP</value> <value>Fallback DNS Resolution, Require IP</value>
</data> </data>
<data name="TbXrayFreedomResolveStrategy" xml:space="preserve"> <data name="TbXrayFreedomResolveStrategy" xml:space="preserve">
<value>xray Freedom Resolution Strategy</value> <value>xray Freedom Resolution Strategy</value>

View file

@ -1,4 +1,5 @@
using System.Reactive; using System.Reactive;
using System.Reactive.Linq;
using ReactiveUI; using ReactiveUI;
using ReactiveUI.Fody.Helpers; using ReactiveUI.Fody.Helpers;
@ -32,6 +33,8 @@ public class DNSSettingViewModel : MyReactiveObject
[Reactive] public bool RayCustomDNSEnableCompatible { get; set; } [Reactive] public bool RayCustomDNSEnableCompatible { get; set; }
[Reactive] public bool SBCustomDNSEnableCompatible { get; set; } [Reactive] public bool SBCustomDNSEnableCompatible { get; set; }
[ObservableAsProperty] public bool IsSimpleDNSEnabled { get; }
public ReactiveCommand<Unit, Unit> SaveCmd { get; } public ReactiveCommand<Unit, Unit> SaveCmd { get; }
public ReactiveCommand<Unit, Unit> ImportDefConfig4V2rayCompatibleCmd { get; } public ReactiveCommand<Unit, Unit> ImportDefConfig4V2rayCompatibleCmd { get; }
public ReactiveCommand<Unit, Unit> ImportDefConfig4SingboxCompatibleCmd { get; } public ReactiveCommand<Unit, Unit> ImportDefConfig4SingboxCompatibleCmd { get; }
@ -55,6 +58,10 @@ public class DNSSettingViewModel : MyReactiveObject
await Task.CompletedTask; await Task.CompletedTask;
}); });
this.WhenAnyValue(x => x.RayCustomDNSEnableCompatible, x => x.SBCustomDNSEnableCompatible)
.Select(x => !(x.Item1 && x.Item2))
.ToPropertyEx(this, x => x.IsSimpleDNSEnabled);
_ = Init(); _ = Init();
} }

View file

@ -37,6 +37,7 @@
<TabItem Header="{x:Static resx:ResUI.ThBasicDNSSettings}"> <TabItem Header="{x:Static resx:ResUI.ThBasicDNSSettings}">
<ScrollViewer VerticalScrollBarVisibility="Visible"> <ScrollViewer VerticalScrollBarVisibility="Visible">
<Grid <Grid
x:Name="gridBasicDNSSettings"
Margin="{StaticResource Margin8}" Margin="{StaticResource Margin8}"
ColumnDefinitions="Auto,Auto,*" ColumnDefinitions="Auto,Auto,*"
RowDefinitions="Auto,Auto,Auto,Auto,Auto,Auto,Auto,Auto,Auto"> RowDefinitions="Auto,Auto,Auto,Auto,Auto,Auto,Auto,Auto,Auto">
@ -103,7 +104,7 @@
Grid.Column="0" Grid.Column="0"
Margin="{StaticResource Margin4}" Margin="{StaticResource Margin4}"
VerticalAlignment="Center" VerticalAlignment="Center"
Text="{x:Static resx:ResUI.TbSBDoHResolverServer}" /> Text="{x:Static resx:ResUI.TbSBBootstrapDNS}" />
<ctrls:AutoCompleteBox <ctrls:AutoCompleteBox
x:Name="cmbSBFinalResolverDNS" x:Name="cmbSBFinalResolverDNS"
Grid.Row="4" Grid.Row="4"
@ -187,6 +188,7 @@
<TabItem Header="{x:Static resx:ResUI.ThAdvancedDNSSettings}"> <TabItem Header="{x:Static resx:ResUI.ThAdvancedDNSSettings}">
<ScrollViewer VerticalScrollBarVisibility="Visible"> <ScrollViewer VerticalScrollBarVisibility="Visible">
<Grid <Grid
x:Name="gridAdvancedDNSSettings"
Margin="{StaticResource Margin8}" Margin="{StaticResource Margin8}"
ColumnDefinitions="Auto,Auto,*" ColumnDefinitions="Auto,Auto,*"
RowDefinitions="Auto,Auto,Auto,Auto,Auto,Auto,*"> RowDefinitions="Auto,Auto,Auto,Auto,Auto,Auto,*">

View file

@ -1,4 +1,5 @@
using System.Reactive.Disposables; using System.Reactive.Disposables;
using System.Reactive.Linq;
using Avalonia.Controls; using Avalonia.Controls;
using Avalonia.Interactivity; using Avalonia.Interactivity;
using ReactiveUI; using ReactiveUI;
@ -67,16 +68,14 @@ public partial class DNSSettingWindow : WindowBase<DNSSettingViewModel>
this.BindCommand(ViewModel, vm => vm.ImportDefConfig4V2rayCompatibleCmd, v => v.btnImportDefConfig4V2rayCompatible).DisposeWith(disposables); this.BindCommand(ViewModel, vm => vm.ImportDefConfig4V2rayCompatibleCmd, v => v.btnImportDefConfig4V2rayCompatible).DisposeWith(disposables);
this.BindCommand(ViewModel, vm => vm.ImportDefConfig4SingboxCompatibleCmd, v => v.btnImportDefConfig4SingboxCompatible).DisposeWith(disposables); this.BindCommand(ViewModel, vm => vm.ImportDefConfig4SingboxCompatibleCmd, v => v.btnImportDefConfig4SingboxCompatible).DisposeWith(disposables);
this.WhenAnyValue( this.WhenAnyValue(x => x.ViewModel.IsSimpleDNSEnabled)
x => x.ViewModel.RayCustomDNSEnableCompatible, .Select(b => !b)
x => x.ViewModel.SBCustomDNSEnableCompatible, .BindTo(this.FindControl<TextBlock>("txtBasicDNSSettingsInvalid"), t => t.IsVisible);
(ray, sb) => ray && sb this.WhenAnyValue(x => x.ViewModel.IsSimpleDNSEnabled)
).BindTo(this.FindControl<TextBlock>("txtBasicDNSSettingsInvalid"), t => t.IsVisible); .Select(b => !b)
this.WhenAnyValue( .BindTo(this.FindControl<TextBlock>("txtAdvancedDNSSettingsInvalid"), t => t.IsVisible);
x => x.ViewModel.RayCustomDNSEnableCompatible, this.Bind(ViewModel, vm => vm.IsSimpleDNSEnabled, v => v.gridBasicDNSSettings.IsEnabled).DisposeWith(disposables);
x => x.ViewModel.SBCustomDNSEnableCompatible, this.Bind(ViewModel, vm => vm.IsSimpleDNSEnabled, v => v.gridAdvancedDNSSettings.IsEnabled).DisposeWith(disposables);
(ray, sb) => ray && sb
).BindTo(this.FindControl<TextBlock>("txtAdvancedDNSSettingsInvalid"), t => t.IsVisible);
}); });
} }

View file

@ -75,6 +75,7 @@
Width="{StaticResource IconButtonWidth}" Width="{StaticResource IconButtonWidth}"
Height="{StaticResource IconButtonHeight}" Height="{StaticResource IconButtonHeight}"
Margin="{StaticResource MarginLr8}" Margin="{StaticResource MarginLr8}"
HorizontalAlignment="Left"
Theme="{DynamicResource BorderlessButton}"> Theme="{DynamicResource BorderlessButton}">
<Button.Content> <Button.Content>
<PathIcon Data="{StaticResource building_more}" Foreground="{DynamicResource ButtonDefaultTertiaryForeground}" /> <PathIcon Data="{StaticResource building_more}" Foreground="{DynamicResource ButtonDefaultTertiaryForeground}" />
@ -208,8 +209,8 @@
Grid.Row="9" Grid.Row="9"
Grid.Column="2" Grid.Column="2"
Margin="{StaticResource Margin4}" Margin="{StaticResource Margin4}"
Content="{x:Static resx:ResUI.TbSelectProfile}" Click="BtnSelectPrevProfile_Click"
Click="BtnSelectPrevProfile_Click" /> Content="{x:Static resx:ResUI.TbSelectProfile}" />
<TextBlock <TextBlock
Grid.Row="10" Grid.Row="10"
@ -228,8 +229,8 @@
Grid.Row="10" Grid.Row="10"
Grid.Column="2" Grid.Column="2"
Margin="{StaticResource Margin4}" Margin="{StaticResource Margin4}"
Content="{x:Static resx:ResUI.TbSelectProfile}" Click="BtnSelectNextProfile_Click"
Click="BtnSelectNextProfile_Click" /> Content="{x:Static resx:ResUI.TbSelectProfile}" />
<TextBlock <TextBlock
Grid.Row="11" Grid.Row="11"

View file

@ -41,7 +41,7 @@
<TabControl HorizontalContentAlignment="Left"> <TabControl HorizontalContentAlignment="Left">
<TabItem Header="{x:Static resx:ResUI.ThBasicDNSSettings}"> <TabItem Header="{x:Static resx:ResUI.ThBasicDNSSettings}">
<ScrollViewer VerticalScrollBarVisibility="Visible"> <ScrollViewer VerticalScrollBarVisibility="Visible">
<Grid Margin="{StaticResource Margin8}"> <Grid x:Name="gridBasicDNSSettings" Margin="{StaticResource Margin8}">
<Grid.RowDefinitions> <Grid.RowDefinitions>
<RowDefinition Height="Auto" /> <RowDefinition Height="Auto" />
<RowDefinition Height="Auto" /> <RowDefinition Height="Auto" />
@ -131,7 +131,7 @@
Margin="{StaticResource Margin8}" Margin="{StaticResource Margin8}"
VerticalAlignment="Center" VerticalAlignment="Center"
Style="{StaticResource ToolbarTextBlock}" Style="{StaticResource ToolbarTextBlock}"
Text="{x:Static resx:ResUI.TbSBDoHResolverServer}" /> Text="{x:Static resx:ResUI.TbSBBootstrapDNS}" />
<ComboBox <ComboBox
x:Name="cmbSBFinalResolverDNS" x:Name="cmbSBFinalResolverDNS"
Grid.Row="4" Grid.Row="4"
@ -222,7 +222,7 @@
</TabItem> </TabItem>
<TabItem Header="{x:Static resx:ResUI.ThAdvancedDNSSettings}"> <TabItem Header="{x:Static resx:ResUI.ThAdvancedDNSSettings}">
<ScrollViewer VerticalScrollBarVisibility="Visible"> <ScrollViewer VerticalScrollBarVisibility="Visible">
<Grid Margin="{StaticResource Margin8}"> <Grid x:Name="gridAdvancedDNSSettings" Margin="{StaticResource Margin8}">
<Grid.RowDefinitions> <Grid.RowDefinitions>
<RowDefinition Height="Auto" /> <RowDefinition Height="Auto" />
<RowDefinition Height="Auto" /> <RowDefinition Height="Auto" />

View file

@ -1,4 +1,5 @@
using System.Reactive.Disposables; using System.Reactive.Disposables;
using System.Reactive.Linq;
using System.Windows; using System.Windows;
using ReactiveUI; using ReactiveUI;
@ -65,18 +66,16 @@ public partial class DNSSettingWindow
this.BindCommand(ViewModel, vm => vm.ImportDefConfig4V2rayCompatibleCmd, v => v.btnImportDefConfig4V2rayCompatible).DisposeWith(disposables); this.BindCommand(ViewModel, vm => vm.ImportDefConfig4V2rayCompatibleCmd, v => v.btnImportDefConfig4V2rayCompatible).DisposeWith(disposables);
this.BindCommand(ViewModel, vm => vm.ImportDefConfig4SingboxCompatibleCmd, v => v.btnImportDefConfig4SingboxCompatible).DisposeWith(disposables); this.BindCommand(ViewModel, vm => vm.ImportDefConfig4SingboxCompatibleCmd, v => v.btnImportDefConfig4SingboxCompatible).DisposeWith(disposables);
this.WhenAnyValue( this.WhenAnyValue(x => x.ViewModel.IsSimpleDNSEnabled)
x => x.ViewModel.RayCustomDNSEnableCompatible, .Select(b => b ? Visibility.Collapsed : Visibility.Visible)
x => x.ViewModel.SBCustomDNSEnableCompatible,
(ray, sb) => ray && sb ? Visibility.Visible : Visibility.Collapsed)
.BindTo(this, x => x.txtBasicDNSSettingsInvalid.Visibility) .BindTo(this, x => x.txtBasicDNSSettingsInvalid.Visibility)
.DisposeWith(disposables); .DisposeWith(disposables);
this.WhenAnyValue( this.WhenAnyValue(x => x.ViewModel.IsSimpleDNSEnabled)
x => x.ViewModel.RayCustomDNSEnableCompatible, .Select(b => b ? Visibility.Collapsed : Visibility.Visible)
x => x.ViewModel.SBCustomDNSEnableCompatible,
(ray, sb) => ray && sb ? Visibility.Visible : Visibility.Collapsed)
.BindTo(this, x => x.txtAdvancedDNSSettingsInvalid.Visibility) .BindTo(this, x => x.txtAdvancedDNSSettingsInvalid.Visibility)
.DisposeWith(disposables); .DisposeWith(disposables);
this.Bind(ViewModel, vm => vm.IsSimpleDNSEnabled, v => v.gridBasicDNSSettings.IsEnabled).DisposeWith(disposables);
this.Bind(ViewModel, vm => vm.IsSimpleDNSEnabled, v => v.gridAdvancedDNSSettings.IsEnabled).DisposeWith(disposables);
}); });
WindowsUtils.SetDarkBorder(this, AppManager.Instance.Config.UiItem.CurrentTheme); WindowsUtils.SetDarkBorder(this, AppManager.Instance.Config.UiItem.CurrentTheme);
} }

View file

@ -117,7 +117,7 @@
<materialDesign:PopupBox <materialDesign:PopupBox
Grid.Row="2" Grid.Row="2"
Grid.Column="2" Grid.Column="2"
HorizontalAlignment="Right" HorizontalAlignment="Left"
StaysOpen="True" StaysOpen="True"
Style="{StaticResource MaterialDesignToolForegroundPopupBox}"> Style="{StaticResource MaterialDesignToolForegroundPopupBox}">
<StackPanel> <StackPanel>