mirror of
https://github.com/2dust/v2rayN.git
synced 2025-10-14 04:19:12 +00:00
Fixes
This commit is contained in:
parent
b8dbe61db3
commit
0a2b4374f9
22 changed files with 748 additions and 399 deletions
|
@ -281,13 +281,13 @@ public class Global
|
||||||
public static readonly List<string> Hysteria2CoreTypes =
|
public static readonly List<string> Hysteria2CoreTypes =
|
||||||
[
|
[
|
||||||
"sing_box",
|
"sing_box",
|
||||||
"Hysteria2"
|
"hysteria2"
|
||||||
];
|
];
|
||||||
|
|
||||||
public static readonly List<string> TuicCoreTypes =
|
public static readonly List<string> TuicCoreTypes =
|
||||||
[
|
[
|
||||||
"sing_box",
|
"sing_box",
|
||||||
"TUIC"
|
"tuic"
|
||||||
];
|
];
|
||||||
|
|
||||||
public static readonly List<EConfigType> SupportSplitConfigTypes =
|
public static readonly List<EConfigType> SupportSplitConfigTypes =
|
||||||
|
|
|
@ -698,7 +698,7 @@ public class ConfigHandler
|
||||||
public static async Task<int> AddHysteria2Server(Config config, ProfileItem profileItem, bool toFile = true)
|
public static async Task<int> AddHysteria2Server(Config config, ProfileItem profileItem, bool toFile = true)
|
||||||
{
|
{
|
||||||
profileItem.ConfigType = EConfigType.Hysteria2;
|
profileItem.ConfigType = EConfigType.Hysteria2;
|
||||||
profileItem.CoreType = ECoreType.sing_box;
|
//profileItem.CoreType = ECoreType.sing_box;
|
||||||
|
|
||||||
profileItem.Address = profileItem.Address.TrimEx();
|
profileItem.Address = profileItem.Address.TrimEx();
|
||||||
profileItem.Id = profileItem.Id.TrimEx();
|
profileItem.Id = profileItem.Id.TrimEx();
|
||||||
|
@ -731,7 +731,7 @@ public class ConfigHandler
|
||||||
public static async Task<int> AddTuicServer(Config config, ProfileItem profileItem, bool toFile = true)
|
public static async Task<int> AddTuicServer(Config config, ProfileItem profileItem, bool toFile = true)
|
||||||
{
|
{
|
||||||
profileItem.ConfigType = EConfigType.TUIC;
|
profileItem.ConfigType = EConfigType.TUIC;
|
||||||
profileItem.CoreType = ECoreType.sing_box;
|
//profileItem.CoreType = ECoreType.sing_box;
|
||||||
|
|
||||||
profileItem.Address = profileItem.Address.TrimEx();
|
profileItem.Address = profileItem.Address.TrimEx();
|
||||||
profileItem.Id = profileItem.Id.TrimEx();
|
profileItem.Id = profileItem.Id.TrimEx();
|
||||||
|
|
27
v2rayN/ServiceLib/Resx/ResUI.Designer.cs
generated
27
v2rayN/ServiceLib/Resx/ResUI.Designer.cs
generated
|
@ -3426,6 +3426,33 @@ namespace ServiceLib.Resx {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 查找类似 Outbound and routing are decoupled. If their Core types differ, two separate cores will be activated. 的本地化字符串。
|
||||||
|
/// </summary>
|
||||||
|
public static string TbSettingsSplitCoreDoc1 {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("TbSettingsSplitCoreDoc1", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 查找类似 Routing Core defaults to sing-box when Tun is enabled. 的本地化字符串。
|
||||||
|
/// </summary>
|
||||||
|
public static string TbSettingsSplitCoreDoc2 {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("TbSettingsSplitCoreDoc2", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 查找类似 Enable separation of outbound and routing cores 的本地化字符串。
|
||||||
|
/// </summary>
|
||||||
|
public static string TbSettingsSplitCoreEnable {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("TbSettingsSplitCoreEnable", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 查找类似 sing-box ruleset files source (optional) 的本地化字符串。
|
/// 查找类似 sing-box ruleset files source (optional) 的本地化字符串。
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|
|
@ -1404,4 +1404,13 @@
|
||||||
<data name="menuAddAnytlsServer" xml:space="preserve">
|
<data name="menuAddAnytlsServer" xml:space="preserve">
|
||||||
<value>Add [Anytls] Configuration</value>
|
<value>Add [Anytls] Configuration</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="TbSettingsSplitCoreEnable" xml:space="preserve">
|
||||||
|
<value>Enable separation of outbound and routing cores</value>
|
||||||
|
</data>
|
||||||
|
<data name="TbSettingsSplitCoreDoc1" xml:space="preserve">
|
||||||
|
<value>Outbound and routing are decoupled. If their Core types differ, two separate cores will be activated.</value>
|
||||||
|
</data>
|
||||||
|
<data name="TbSettingsSplitCoreDoc2" xml:space="preserve">
|
||||||
|
<value>Routing Core defaults to sing-box when Tun is enabled.</value>
|
||||||
|
</data>
|
||||||
</root>
|
</root>
|
|
@ -1404,4 +1404,13 @@
|
||||||
<data name="menuAddAnytlsServer" xml:space="preserve">
|
<data name="menuAddAnytlsServer" xml:space="preserve">
|
||||||
<value>[Anytls] konfiguráció hozzáadása</value>
|
<value>[Anytls] konfiguráció hozzáadása</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="TbSettingsSplitCoreEnable" xml:space="preserve">
|
||||||
|
<value>Enable separation of outbound and routing cores</value>
|
||||||
|
</data>
|
||||||
|
<data name="TbSettingsSplitCoreDoc1" xml:space="preserve">
|
||||||
|
<value>Outbound and routing are decoupled. If their Core types differ, two separate cores will be activated.</value>
|
||||||
|
</data>
|
||||||
|
<data name="TbSettingsSplitCoreDoc2" xml:space="preserve">
|
||||||
|
<value>Routing Core defaults to sing-box when Tun is enabled.</value>
|
||||||
|
</data>
|
||||||
</root>
|
</root>
|
|
@ -1404,4 +1404,13 @@
|
||||||
<data name="menuAddAnytlsServer" xml:space="preserve">
|
<data name="menuAddAnytlsServer" xml:space="preserve">
|
||||||
<value>Add [Anytls] Configuration</value>
|
<value>Add [Anytls] Configuration</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="TbSettingsSplitCoreEnable" xml:space="preserve">
|
||||||
|
<value>Enable separation of outbound and routing cores</value>
|
||||||
|
</data>
|
||||||
|
<data name="TbSettingsSplitCoreDoc1" xml:space="preserve">
|
||||||
|
<value>Outbound and routing are decoupled. If their Core types differ, two separate cores will be activated.</value>
|
||||||
|
</data>
|
||||||
|
<data name="TbSettingsSplitCoreDoc2" xml:space="preserve">
|
||||||
|
<value>Routing Core defaults to sing-box when Tun is enabled.</value>
|
||||||
|
</data>
|
||||||
</root>
|
</root>
|
|
@ -1404,4 +1404,13 @@
|
||||||
<data name="menuAddAnytlsServer" xml:space="preserve">
|
<data name="menuAddAnytlsServer" xml:space="preserve">
|
||||||
<value>Добавить сервер [Anytls]</value>
|
<value>Добавить сервер [Anytls]</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="TbSettingsSplitCoreEnable" xml:space="preserve">
|
||||||
|
<value>Enable separation of outbound and routing cores</value>
|
||||||
|
</data>
|
||||||
|
<data name="TbSettingsSplitCoreDoc1" xml:space="preserve">
|
||||||
|
<value>Outbound and routing are decoupled. If their Core types differ, two separate cores will be activated.</value>
|
||||||
|
</data>
|
||||||
|
<data name="TbSettingsSplitCoreDoc2" xml:space="preserve">
|
||||||
|
<value>Routing Core defaults to sing-box when Tun is enabled.</value>
|
||||||
|
</data>
|
||||||
</root>
|
</root>
|
|
@ -1401,4 +1401,13 @@
|
||||||
<data name="menuAddAnytlsServer" xml:space="preserve">
|
<data name="menuAddAnytlsServer" xml:space="preserve">
|
||||||
<value>添加 [Anytls] 配置文件</value>
|
<value>添加 [Anytls] 配置文件</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="TbSettingsSplitCoreEnable" xml:space="preserve">
|
||||||
|
<value>启用出站核心与路由核心分离</value>
|
||||||
|
</data>
|
||||||
|
<data name="TbSettingsSplitCoreDoc1" xml:space="preserve">
|
||||||
|
<value>出站与路由分离,出站与分流 Core 类型不同时,将启用两个核心</value>
|
||||||
|
</data>
|
||||||
|
<data name="TbSettingsSplitCoreDoc2" xml:space="preserve">
|
||||||
|
<value>启用 Tun 时,路由 Core 为 sing-box</value>
|
||||||
|
</data>
|
||||||
</root>
|
</root>
|
|
@ -1401,4 +1401,13 @@
|
||||||
<data name="menuAddAnytlsServer" xml:space="preserve">
|
<data name="menuAddAnytlsServer" xml:space="preserve">
|
||||||
<value>新增 [Anytls] 設定檔</value>
|
<value>新增 [Anytls] 設定檔</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="TbSettingsSplitCoreEnable" xml:space="preserve">
|
||||||
|
<value>Enable separation of outbound and routing cores</value>
|
||||||
|
</data>
|
||||||
|
<data name="TbSettingsSplitCoreDoc1" xml:space="preserve">
|
||||||
|
<value>Outbound and routing are decoupled. If their Core types differ, two separate cores will be activated.</value>
|
||||||
|
</data>
|
||||||
|
<data name="TbSettingsSplitCoreDoc2" xml:space="preserve">
|
||||||
|
<value>Routing Core defaults to sing-box when Tun is enabled.</value>
|
||||||
|
</data>
|
||||||
</root>
|
</root>
|
|
@ -2,6 +2,7 @@ using System.Data;
|
||||||
using System.Net;
|
using System.Net;
|
||||||
using System.Net.NetworkInformation;
|
using System.Net.NetworkInformation;
|
||||||
using System.Reactive;
|
using System.Reactive;
|
||||||
|
using System.Text.Json.Nodes;
|
||||||
using DynamicData;
|
using DynamicData;
|
||||||
using ServiceLib.Models;
|
using ServiceLib.Models;
|
||||||
|
|
||||||
|
@ -587,7 +588,7 @@ public class CoreConfigSingboxService
|
||||||
|
|
||||||
config.Remove("route");
|
config.Remove("route");
|
||||||
|
|
||||||
ret.Data = config.ToJsonString(new() { WriteIndented = true });
|
ret.Data = JsonUtils.Serialize(config, true);
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
|
@ -453,6 +453,10 @@ public class CoreConfigV2rayService
|
||||||
await GenLog(v2rayConfig);
|
await GenLog(v2rayConfig);
|
||||||
|
|
||||||
var inbound = GetInbound(_config.Inbound.First(), EInboundProtocol.split, true);
|
var inbound = GetInbound(_config.Inbound.First(), EInboundProtocol.split, true);
|
||||||
|
inbound.sniffing = new Sniffing4Ray
|
||||||
|
{
|
||||||
|
enabled = false
|
||||||
|
};
|
||||||
|
|
||||||
v2rayConfig.inbounds = new() { inbound };
|
v2rayConfig.inbounds = new() { inbound };
|
||||||
|
|
||||||
|
@ -469,7 +473,7 @@ public class CoreConfigV2rayService
|
||||||
|
|
||||||
config.Remove("routing");
|
config.Remove("routing");
|
||||||
|
|
||||||
ret.Data = config.ToJsonString(new() { WriteIndented = true });
|
ret.Data = JsonUtils.Serialize(config, true);
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
|
@ -36,6 +36,7 @@ public class CoreConfigBrookService
|
||||||
processArgs += " --server " + node.Address + ":" + node.Port;
|
processArgs += " --server " + node.Address + ":" + node.Port;
|
||||||
processArgs += " --password " + node.Id;
|
processArgs += " --password " + node.Id;
|
||||||
|
|
||||||
|
ret.Success = true;
|
||||||
ret.Data = processArgs;
|
ret.Data = processArgs;
|
||||||
|
|
||||||
return await Task.FromResult(ret);
|
return await Task.FromResult(ret);
|
||||||
|
|
|
@ -74,7 +74,8 @@ public class CoreConfigHy2Service
|
||||||
configJsonNode["bandwidth"] = bandwidthObject;
|
configJsonNode["bandwidth"] = bandwidthObject;
|
||||||
}
|
}
|
||||||
|
|
||||||
ret.Data = configJsonNode.ToJsonString(new() { WriteIndented = true });
|
ret.Success = true;
|
||||||
|
ret.Data = JsonUtils.Serialize(configJsonNode, true);
|
||||||
|
|
||||||
return await Task.FromResult(ret);
|
return await Task.FromResult(ret);
|
||||||
}
|
}
|
||||||
|
|
|
@ -56,9 +56,10 @@ public class CoreConfigJuicityService
|
||||||
configJsonNode["sni"] = node.Sni;
|
configJsonNode["sni"] = node.Sni;
|
||||||
}
|
}
|
||||||
configJsonNode["allow_insecure"] = node.AllowInsecure == "true";
|
configJsonNode["allow_insecure"] = node.AllowInsecure == "true";
|
||||||
configJsonNode["congestion_control"] = "bbr";
|
configJsonNode["congestion_control"] = node.HeaderType;
|
||||||
|
|
||||||
ret.Data = configJsonNode.ToJsonString(new() { WriteIndented = true });
|
ret.Success = true;
|
||||||
|
ret.Data = JsonUtils.Serialize(configJsonNode, true);
|
||||||
|
|
||||||
return await Task.FromResult(ret);
|
return await Task.FromResult(ret);
|
||||||
}
|
}
|
||||||
|
|
|
@ -39,7 +39,8 @@ public class CoreConfigNaiveService
|
||||||
// outbound
|
// outbound
|
||||||
configJsonNode["proxy"] = (node.Network == "quic" ? "quic://" : Global.HttpsProtocol) + node.Id + "@" + node.Address + ":" + node.Port;
|
configJsonNode["proxy"] = (node.Network == "quic" ? "quic://" : Global.HttpsProtocol) + node.Id + "@" + node.Address + ":" + node.Port;
|
||||||
|
|
||||||
ret.Data = configJsonNode.ToJsonString(new() { WriteIndented = true });
|
ret.Success = true;
|
||||||
|
ret.Data = JsonUtils.Serialize(configJsonNode, true);
|
||||||
|
|
||||||
return await Task.FromResult(ret);
|
return await Task.FromResult(ret);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,3 +1,5 @@
|
||||||
|
using System.Text.Json.Nodes;
|
||||||
|
|
||||||
namespace ServiceLib.Services.CoreConfig.Minimal;
|
namespace ServiceLib.Services.CoreConfig.Minimal;
|
||||||
public class CoreConfigShadowquicService
|
public class CoreConfigShadowquicService
|
||||||
{
|
{
|
||||||
|
@ -51,14 +53,24 @@ public class CoreConfigShadowquicService
|
||||||
configYamlNode["inbound"] = inboundNode;
|
configYamlNode["inbound"] = inboundNode;
|
||||||
|
|
||||||
// outbound
|
// outbound
|
||||||
|
var alpn = new JsonArray();
|
||||||
|
foreach (var item in node.GetAlpn() ?? new List<string>())
|
||||||
|
{
|
||||||
|
alpn.Add(item);
|
||||||
|
}
|
||||||
|
if (alpn.Count == 0)
|
||||||
|
{
|
||||||
|
alpn.Add("h3");
|
||||||
|
}
|
||||||
|
|
||||||
var outboundNode = new Dictionary<string, object>
|
var outboundNode = new Dictionary<string, object>
|
||||||
{
|
{
|
||||||
["type"] = "shadowquic",
|
["type"] = "shadowquic",
|
||||||
["addr"] = node.Address + ":" + node.Port,
|
["addr"] = node.Address + ":" + node.Port,
|
||||||
["password"] = node.Id,
|
["password"] = node.Id,
|
||||||
["username"] = node.Security,
|
["username"] = node.Security,
|
||||||
["alpn"] = new List<string> { "h3" },
|
["alpn"] = alpn,
|
||||||
["congestion-control"] = "bbr",
|
["congestion-control"] = node.HeaderType,
|
||||||
["zero-rtt"] = true
|
["zero-rtt"] = true
|
||||||
};
|
};
|
||||||
if (node.Sni.IsNotEmpty())
|
if (node.Sni.IsNotEmpty())
|
||||||
|
@ -67,6 +79,7 @@ public class CoreConfigShadowquicService
|
||||||
}
|
}
|
||||||
configYamlNode["outbound"] = outboundNode;
|
configYamlNode["outbound"] = outboundNode;
|
||||||
|
|
||||||
|
ret.Success = true;
|
||||||
ret.Data = YamlUtils.ToYaml(configYamlNode);
|
ret.Data = YamlUtils.ToYaml(configYamlNode);
|
||||||
|
|
||||||
return await Task.FromResult(ret);
|
return await Task.FromResult(ret);
|
||||||
|
|
|
@ -51,17 +51,28 @@ public class CoreConfigTuicService
|
||||||
};
|
};
|
||||||
|
|
||||||
// outbound
|
// outbound
|
||||||
|
var alpn = new JsonArray();
|
||||||
|
foreach(var item in node.GetAlpn() ?? new List<string>())
|
||||||
|
{
|
||||||
|
alpn.Add(item);
|
||||||
|
}
|
||||||
|
if (alpn.Count == 0)
|
||||||
|
{
|
||||||
|
alpn.Add("h3");
|
||||||
|
}
|
||||||
|
|
||||||
configJsonNode["relay"] = new JsonObject
|
configJsonNode["relay"] = new JsonObject
|
||||||
{
|
{
|
||||||
["server"] = node.Address + ":" + node.Port,
|
["server"] = node.Address + ":" + node.Port,
|
||||||
["uuid"] = node.Id,
|
["uuid"] = node.Id,
|
||||||
["password"] = node.Security,
|
["password"] = node.Security,
|
||||||
["udp_relay_mode"] = "quic",
|
["udp_relay_mode"] = "quic",
|
||||||
["congestion_control"] = "bbr",
|
["congestion_control"] = node.HeaderType,
|
||||||
["alpn"] = new JsonArray { "h3", "spdy/3.1" }
|
["alpn"] = alpn
|
||||||
};
|
};
|
||||||
|
|
||||||
ret.Data = configJsonNode.ToJsonString(new() { WriteIndented = true });
|
ret.Success = true;
|
||||||
|
ret.Data = JsonUtils.Serialize(configJsonNode, true);
|
||||||
|
|
||||||
return await Task.FromResult(ret);
|
return await Task.FromResult(ret);
|
||||||
}
|
}
|
||||||
|
|
|
@ -78,7 +78,8 @@ public partial class AddServerWindow : WindowBase<AddServerViewModel>
|
||||||
gridHysteria2.IsVisible = true;
|
gridHysteria2.IsVisible = true;
|
||||||
sepa2.IsVisible = false;
|
sepa2.IsVisible = false;
|
||||||
gridTransport.IsVisible = false;
|
gridTransport.IsVisible = false;
|
||||||
cmbCoreType.IsEnabled = false;
|
//cmbCoreType.IsEnabled = false;
|
||||||
|
cmbCoreType.ItemsSource = Global.Hysteria2CoreTypes;
|
||||||
cmbFingerprint.IsEnabled = false;
|
cmbFingerprint.IsEnabled = false;
|
||||||
cmbFingerprint.SelectedValue = string.Empty;
|
cmbFingerprint.SelectedValue = string.Empty;
|
||||||
break;
|
break;
|
||||||
|
@ -87,7 +88,8 @@ public partial class AddServerWindow : WindowBase<AddServerViewModel>
|
||||||
gridTuic.IsVisible = true;
|
gridTuic.IsVisible = true;
|
||||||
sepa2.IsVisible = false;
|
sepa2.IsVisible = false;
|
||||||
gridTransport.IsVisible = false;
|
gridTransport.IsVisible = false;
|
||||||
cmbCoreType.IsEnabled = false;
|
//cmbCoreType.IsEnabled = false;
|
||||||
|
cmbCoreType.ItemsSource = Global.TuicCoreTypes;
|
||||||
cmbFingerprint.IsEnabled = false;
|
cmbFingerprint.IsEnabled = false;
|
||||||
cmbFingerprint.SelectedValue = string.Empty;
|
cmbFingerprint.SelectedValue = string.Empty;
|
||||||
|
|
||||||
|
|
|
@ -802,10 +802,35 @@
|
||||||
</TabItem>
|
</TabItem>
|
||||||
|
|
||||||
<TabItem Header="{x:Static resx:ResUI.TbSettingsCoreType}">
|
<TabItem Header="{x:Static resx:ResUI.TbSettingsCoreType}">
|
||||||
|
<ScrollViewer VerticalScrollBarVisibility="Visible">
|
||||||
|
<Grid Margin="{StaticResource Margin4}">
|
||||||
|
<Grid.RowDefinitions>
|
||||||
|
<RowDefinition Height="Auto" />
|
||||||
|
</Grid.RowDefinitions>
|
||||||
|
<Grid.ColumnDefinitions>
|
||||||
|
<ColumnDefinition Width="Auto" />
|
||||||
|
<ColumnDefinition Width="Auto" />
|
||||||
|
</Grid.ColumnDefinitions>
|
||||||
|
|
||||||
<Grid
|
<Grid
|
||||||
Margin="{StaticResource Margin4}"
|
Grid.Row="0"
|
||||||
ColumnDefinitions="Auto,Auto"
|
Grid.Column="0"
|
||||||
RowDefinitions="Auto,Auto,Auto,Auto,Auto,Auto,Auto,Auto">
|
Margin="{StaticResource Margin4}">
|
||||||
|
<Grid.RowDefinitions>
|
||||||
|
<RowDefinition Height="Auto" />
|
||||||
|
<RowDefinition Height="Auto" />
|
||||||
|
<RowDefinition Height="Auto" />
|
||||||
|
<RowDefinition Height="Auto" />
|
||||||
|
<RowDefinition Height="Auto" />
|
||||||
|
<RowDefinition Height="Auto" />
|
||||||
|
<RowDefinition Height="Auto" />
|
||||||
|
<RowDefinition Height="Auto" />
|
||||||
|
</Grid.RowDefinitions>
|
||||||
|
<Grid.ColumnDefinitions>
|
||||||
|
<ColumnDefinition Width="Auto" />
|
||||||
|
<ColumnDefinition Width="Auto" />
|
||||||
|
</Grid.ColumnDefinitions>
|
||||||
|
|
||||||
<TextBlock
|
<TextBlock
|
||||||
Grid.Row="1"
|
Grid.Row="1"
|
||||||
Grid.Column="0"
|
Grid.Column="0"
|
||||||
|
@ -897,6 +922,178 @@
|
||||||
Width="200"
|
Width="200"
|
||||||
Margin="{StaticResource Margin4}" />
|
Margin="{StaticResource Margin4}" />
|
||||||
</Grid>
|
</Grid>
|
||||||
|
|
||||||
|
<Grid
|
||||||
|
Grid.Row="0"
|
||||||
|
Grid.Column="1"
|
||||||
|
Margin="{StaticResource Margin4}">
|
||||||
|
<Grid.RowDefinitions>
|
||||||
|
<RowDefinition Height="Auto" />
|
||||||
|
<RowDefinition Height="Auto" />
|
||||||
|
<RowDefinition Height="Auto" />
|
||||||
|
<RowDefinition Height="Auto" />
|
||||||
|
<RowDefinition Height="Auto" />
|
||||||
|
<RowDefinition Height="Auto" />
|
||||||
|
<RowDefinition Height="Auto" />
|
||||||
|
<RowDefinition Height="Auto" />
|
||||||
|
<RowDefinition Height="Auto" />
|
||||||
|
<RowDefinition Height="Auto" />
|
||||||
|
<RowDefinition Height="Auto" />
|
||||||
|
<RowDefinition Height="Auto" />
|
||||||
|
</Grid.RowDefinitions>
|
||||||
|
<Grid.ColumnDefinitions>
|
||||||
|
<ColumnDefinition Width="Auto" />
|
||||||
|
<ColumnDefinition Width="Auto" />
|
||||||
|
</Grid.ColumnDefinitions>
|
||||||
|
|
||||||
|
<TextBlock
|
||||||
|
Grid.Row="0"
|
||||||
|
Grid.Column="0"
|
||||||
|
Grid.ColumnSpan="2"
|
||||||
|
Margin="{StaticResource Margin4}"
|
||||||
|
VerticalAlignment="Center"
|
||||||
|
Text="{x:Static resx:ResUI.TbSettingsSplitCoreDoc1}" />
|
||||||
|
|
||||||
|
<TextBlock
|
||||||
|
Grid.Row="1"
|
||||||
|
Grid.Column="0"
|
||||||
|
Grid.ColumnSpan="2"
|
||||||
|
Margin="{StaticResource Margin4}"
|
||||||
|
VerticalAlignment="Center"
|
||||||
|
Text="{x:Static resx:ResUI.TbSettingsSplitCoreDoc2}" />
|
||||||
|
|
||||||
|
<TextBlock
|
||||||
|
Grid.Row="2"
|
||||||
|
Grid.Column="0"
|
||||||
|
Margin="{StaticResource Margin4}"
|
||||||
|
VerticalAlignment="Center"
|
||||||
|
Text="{x:Static resx:ResUI.TbSettingsSplitCoreEnable}" />
|
||||||
|
<ToggleSwitch
|
||||||
|
x:Name="togCoreSplit"
|
||||||
|
Grid.Row="2"
|
||||||
|
Grid.Column="1"
|
||||||
|
Margin="{StaticResource Margin4}"
|
||||||
|
HorizontalAlignment="Left" />
|
||||||
|
|
||||||
|
<TextBlock
|
||||||
|
Grid.Row="3"
|
||||||
|
Grid.Column="0"
|
||||||
|
Margin="{StaticResource Margin4}"
|
||||||
|
VerticalAlignment="Center"
|
||||||
|
Text="路由 Core" />
|
||||||
|
<ComboBox
|
||||||
|
x:Name="cmbCoreSplitRouteType"
|
||||||
|
Grid.Row="3"
|
||||||
|
Grid.Column="1"
|
||||||
|
Width="200"
|
||||||
|
Margin="{StaticResource Margin4}" />
|
||||||
|
|
||||||
|
<TextBlock
|
||||||
|
Grid.Row="4"
|
||||||
|
Grid.Column="0"
|
||||||
|
Margin="{StaticResource Margin4}"
|
||||||
|
VerticalAlignment="Center"
|
||||||
|
Text="VMess" />
|
||||||
|
<ComboBox
|
||||||
|
x:Name="cmbCoreSplitType1"
|
||||||
|
Grid.Row="4"
|
||||||
|
Grid.Column="1"
|
||||||
|
Width="200"
|
||||||
|
Margin="{StaticResource Margin4}" />
|
||||||
|
|
||||||
|
<TextBlock
|
||||||
|
Grid.Row="5"
|
||||||
|
Grid.Column="0"
|
||||||
|
Margin="{StaticResource Margin4}"
|
||||||
|
VerticalAlignment="Center"
|
||||||
|
Text="Shadowsocks" />
|
||||||
|
<ComboBox
|
||||||
|
x:Name="cmbCoreSplitType3"
|
||||||
|
Grid.Row="5"
|
||||||
|
Grid.Column="1"
|
||||||
|
Width="200"
|
||||||
|
Margin="{StaticResource Margin4}" />
|
||||||
|
|
||||||
|
<TextBlock
|
||||||
|
Grid.Row="6"
|
||||||
|
Grid.Column="0"
|
||||||
|
Margin="{StaticResource Margin4}"
|
||||||
|
VerticalAlignment="Center"
|
||||||
|
Text="Socks" />
|
||||||
|
<ComboBox
|
||||||
|
x:Name="cmbCoreSplitType4"
|
||||||
|
Grid.Row="6"
|
||||||
|
Grid.Column="1"
|
||||||
|
Width="200"
|
||||||
|
Margin="{StaticResource Margin4}" />
|
||||||
|
|
||||||
|
<TextBlock
|
||||||
|
Grid.Row="7"
|
||||||
|
Grid.Column="0"
|
||||||
|
Margin="{StaticResource Margin4}"
|
||||||
|
VerticalAlignment="Center"
|
||||||
|
Text="VLESS" />
|
||||||
|
<ComboBox
|
||||||
|
x:Name="cmbCoreSplitType5"
|
||||||
|
Grid.Row="7"
|
||||||
|
Grid.Column="1"
|
||||||
|
Width="200"
|
||||||
|
Margin="{StaticResource Margin4}" />
|
||||||
|
|
||||||
|
<TextBlock
|
||||||
|
Grid.Row="8"
|
||||||
|
Grid.Column="0"
|
||||||
|
Margin="{StaticResource Margin4}"
|
||||||
|
VerticalAlignment="Center"
|
||||||
|
Text="Trojan" />
|
||||||
|
<ComboBox
|
||||||
|
x:Name="cmbCoreSplitType6"
|
||||||
|
Grid.Row="8"
|
||||||
|
Grid.Column="1"
|
||||||
|
Width="200"
|
||||||
|
Margin="{StaticResource Margin4}" />
|
||||||
|
|
||||||
|
<TextBlock
|
||||||
|
Grid.Row="9"
|
||||||
|
Grid.Column="0"
|
||||||
|
Margin="{StaticResource Margin4}"
|
||||||
|
VerticalAlignment="Center"
|
||||||
|
Text="Hysteria2" />
|
||||||
|
<ComboBox
|
||||||
|
x:Name="cmbCoreSplitType7"
|
||||||
|
Grid.Row="9"
|
||||||
|
Grid.Column="1"
|
||||||
|
Width="200"
|
||||||
|
Margin="{StaticResource Margin4}" />
|
||||||
|
|
||||||
|
<TextBlock
|
||||||
|
Grid.Row="10"
|
||||||
|
Grid.Column="0"
|
||||||
|
Margin="{StaticResource Margin4}"
|
||||||
|
VerticalAlignment="Center"
|
||||||
|
Text="TUIC" />
|
||||||
|
<ComboBox
|
||||||
|
x:Name="cmbCoreSplitType8"
|
||||||
|
Grid.Row="10"
|
||||||
|
Grid.Column="1"
|
||||||
|
Width="200"
|
||||||
|
Margin="{StaticResource Margin4}" />
|
||||||
|
|
||||||
|
<TextBlock
|
||||||
|
Grid.Row="11"
|
||||||
|
Grid.Column="0"
|
||||||
|
Margin="{StaticResource Margin4}"
|
||||||
|
VerticalAlignment="Center"
|
||||||
|
Text="Wireguard" />
|
||||||
|
<ComboBox
|
||||||
|
x:Name="cmbCoreSplitType9"
|
||||||
|
Grid.Row="11"
|
||||||
|
Grid.Column="1"
|
||||||
|
Width="200"
|
||||||
|
Margin="{StaticResource Margin4}" />
|
||||||
|
</Grid>
|
||||||
|
</Grid>
|
||||||
|
</ScrollViewer>
|
||||||
</TabItem>
|
</TabItem>
|
||||||
</TabControl>
|
</TabControl>
|
||||||
</DockPanel>
|
</DockPanel>
|
||||||
|
|
|
@ -41,6 +41,17 @@ public partial class OptionSettingWindow : WindowBase<OptionSettingViewModel>
|
||||||
cmbCoreType6.ItemsSource = Global.CoreTypes;
|
cmbCoreType6.ItemsSource = Global.CoreTypes;
|
||||||
cmbCoreType9.ItemsSource = Global.CoreTypes;
|
cmbCoreType9.ItemsSource = Global.CoreTypes;
|
||||||
|
|
||||||
|
cmbCoreSplitRouteType.ItemsSource = Global.CoreTypes;
|
||||||
|
|
||||||
|
cmbCoreSplitType1.ItemsSource = Global.CoreTypes;
|
||||||
|
cmbCoreSplitType3.ItemsSource = Global.CoreTypes;
|
||||||
|
cmbCoreSplitType4.ItemsSource = Global.CoreTypes;
|
||||||
|
cmbCoreSplitType5.ItemsSource = Global.CoreTypes;
|
||||||
|
cmbCoreSplitType6.ItemsSource = Global.CoreTypes;
|
||||||
|
cmbCoreSplitType7.ItemsSource = Global.Hysteria2CoreTypes;
|
||||||
|
cmbCoreSplitType8.ItemsSource = Global.TuicCoreTypes;
|
||||||
|
cmbCoreSplitType9.ItemsSource = Global.CoreTypes;
|
||||||
|
|
||||||
cmbMixedConcurrencyCount.ItemsSource = Enumerable.Range(2, 7).ToList();
|
cmbMixedConcurrencyCount.ItemsSource = Enumerable.Range(2, 7).ToList();
|
||||||
cmbSpeedTestTimeout.ItemsSource = Enumerable.Range(2, 5).Select(i => i * 5).ToList();
|
cmbSpeedTestTimeout.ItemsSource = Enumerable.Range(2, 5).Select(i => i * 5).ToList();
|
||||||
cmbSpeedTestUrl.ItemsSource = Global.SpeedTestUrls;
|
cmbSpeedTestUrl.ItemsSource = Global.SpeedTestUrls;
|
||||||
|
@ -119,6 +130,18 @@ public partial class OptionSettingWindow : WindowBase<OptionSettingViewModel>
|
||||||
this.Bind(ViewModel, vm => vm.CoreType6, v => v.cmbCoreType6.SelectedValue).DisposeWith(disposables);
|
this.Bind(ViewModel, vm => vm.CoreType6, v => v.cmbCoreType6.SelectedValue).DisposeWith(disposables);
|
||||||
this.Bind(ViewModel, vm => vm.CoreType9, v => v.cmbCoreType9.SelectedValue).DisposeWith(disposables);
|
this.Bind(ViewModel, vm => vm.CoreType9, v => v.cmbCoreType9.SelectedValue).DisposeWith(disposables);
|
||||||
|
|
||||||
|
this.Bind(ViewModel, vm => vm.EnableSplitCore, v => v.togCoreSplit.IsChecked).DisposeWith(disposables);
|
||||||
|
this.Bind(ViewModel, vm => vm.RouteSplitCoreType, v => v.cmbCoreSplitRouteType.SelectedValue).DisposeWith(disposables);
|
||||||
|
|
||||||
|
this.Bind(ViewModel, vm => vm.SplitCoreType1, v => v.cmbCoreSplitType1.SelectedValue).DisposeWith(disposables);
|
||||||
|
this.Bind(ViewModel, vm => vm.SplitCoreType3, v => v.cmbCoreSplitType3.SelectedValue).DisposeWith(disposables);
|
||||||
|
this.Bind(ViewModel, vm => vm.SplitCoreType4, v => v.cmbCoreSplitType4.SelectedValue).DisposeWith(disposables);
|
||||||
|
this.Bind(ViewModel, vm => vm.SplitCoreType5, v => v.cmbCoreSplitType5.SelectedValue).DisposeWith(disposables);
|
||||||
|
this.Bind(ViewModel, vm => vm.SplitCoreType6, v => v.cmbCoreSplitType6.SelectedValue).DisposeWith(disposables);
|
||||||
|
this.Bind(ViewModel, vm => vm.SplitCoreType7, v => v.cmbCoreSplitType7.SelectedValue).DisposeWith(disposables);
|
||||||
|
this.Bind(ViewModel, vm => vm.SplitCoreType8, v => v.cmbCoreSplitType8.SelectedValue).DisposeWith(disposables);
|
||||||
|
this.Bind(ViewModel, vm => vm.SplitCoreType9, v => v.cmbCoreSplitType9.SelectedValue).DisposeWith(disposables);
|
||||||
|
|
||||||
this.BindCommand(ViewModel, vm => vm.SaveCmd, v => v.btnSave).DisposeWith(disposables);
|
this.BindCommand(ViewModel, vm => vm.SaveCmd, v => v.btnSave).DisposeWith(disposables);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
@ -72,7 +72,8 @@ public partial class AddServerWindow
|
||||||
gridHysteria2.Visibility = Visibility.Visible;
|
gridHysteria2.Visibility = Visibility.Visible;
|
||||||
sepa2.Visibility = Visibility.Collapsed;
|
sepa2.Visibility = Visibility.Collapsed;
|
||||||
gridTransport.Visibility = Visibility.Collapsed;
|
gridTransport.Visibility = Visibility.Collapsed;
|
||||||
cmbCoreType.IsEnabled = false;
|
//cmbCoreType.IsEnabled = false;
|
||||||
|
cmbCoreType.ItemsSource = Global.Hysteria2CoreTypes;
|
||||||
cmbFingerprint.IsEnabled = false;
|
cmbFingerprint.IsEnabled = false;
|
||||||
cmbFingerprint.Text = string.Empty;
|
cmbFingerprint.Text = string.Empty;
|
||||||
break;
|
break;
|
||||||
|
@ -81,7 +82,8 @@ public partial class AddServerWindow
|
||||||
gridTuic.Visibility = Visibility.Visible;
|
gridTuic.Visibility = Visibility.Visible;
|
||||||
sepa2.Visibility = Visibility.Collapsed;
|
sepa2.Visibility = Visibility.Collapsed;
|
||||||
gridTransport.Visibility = Visibility.Collapsed;
|
gridTransport.Visibility = Visibility.Collapsed;
|
||||||
cmbCoreType.IsEnabled = false;
|
//cmbCoreType.IsEnabled = false;
|
||||||
|
cmbCoreType.ItemsSource = Global.TuicCoreTypes;
|
||||||
cmbFingerprint.IsEnabled = false;
|
cmbFingerprint.IsEnabled = false;
|
||||||
cmbFingerprint.Text = string.Empty;
|
cmbFingerprint.Text = string.Empty;
|
||||||
|
|
||||||
|
|
|
@ -1107,6 +1107,7 @@
|
||||||
</TabItem>
|
</TabItem>
|
||||||
|
|
||||||
<TabItem Header="{x:Static resx:ResUI.TbSettingsCoreType}">
|
<TabItem Header="{x:Static resx:ResUI.TbSettingsCoreType}">
|
||||||
|
<ScrollViewer VerticalScrollBarVisibility="Visible">
|
||||||
<Grid Margin="{StaticResource Margin8}">
|
<Grid Margin="{StaticResource Margin8}">
|
||||||
<Grid.RowDefinitions>
|
<Grid.RowDefinitions>
|
||||||
<RowDefinition Height="Auto" />
|
<RowDefinition Height="Auto" />
|
||||||
|
@ -1267,24 +1268,33 @@
|
||||||
Margin="{StaticResource Margin8}"
|
Margin="{StaticResource Margin8}"
|
||||||
VerticalAlignment="Center"
|
VerticalAlignment="Center"
|
||||||
Style="{StaticResource ToolbarTextBlock}"
|
Style="{StaticResource ToolbarTextBlock}"
|
||||||
Text="出站与路由分离,出站与分流 Core 类型不同时,将启用两个核心" />
|
Text="{x:Static resx:ResUI.TbSettingsSplitCoreDoc1}" />
|
||||||
|
|
||||||
<TextBlock
|
<TextBlock
|
||||||
Grid.Row="1"
|
Grid.Row="1"
|
||||||
Grid.Column="0"
|
Grid.Column="0"
|
||||||
|
Grid.ColumnSpan="2"
|
||||||
Margin="{StaticResource Margin8}"
|
Margin="{StaticResource Margin8}"
|
||||||
VerticalAlignment="Center"
|
VerticalAlignment="Center"
|
||||||
Style="{StaticResource ToolbarTextBlock}"
|
Style="{StaticResource ToolbarTextBlock}"
|
||||||
Text="出站与路由分离" />
|
Text="{x:Static resx:ResUI.TbSettingsSplitCoreDoc2}" />
|
||||||
|
|
||||||
|
<TextBlock
|
||||||
|
Grid.Row="2"
|
||||||
|
Grid.Column="0"
|
||||||
|
Margin="{StaticResource Margin8}"
|
||||||
|
VerticalAlignment="Center"
|
||||||
|
Style="{StaticResource ToolbarTextBlock}"
|
||||||
|
Text="{x:Static resx:ResUI.TbSettingsSplitCoreEnable}" />
|
||||||
<ToggleButton
|
<ToggleButton
|
||||||
x:Name="togCoreSplit"
|
x:Name="togCoreSplit"
|
||||||
Grid.Row="1"
|
Grid.Row="2"
|
||||||
Grid.Column="1"
|
Grid.Column="1"
|
||||||
Margin="{StaticResource Margin8}"
|
Margin="{StaticResource Margin8}"
|
||||||
HorizontalAlignment="Left" />
|
HorizontalAlignment="Left" />
|
||||||
|
|
||||||
<TextBlock
|
<TextBlock
|
||||||
Grid.Row="2"
|
Grid.Row="3"
|
||||||
Grid.Column="0"
|
Grid.Column="0"
|
||||||
Margin="{StaticResource Margin8}"
|
Margin="{StaticResource Margin8}"
|
||||||
VerticalAlignment="Center"
|
VerticalAlignment="Center"
|
||||||
|
@ -1292,14 +1302,14 @@
|
||||||
Text="路由 Core" />
|
Text="路由 Core" />
|
||||||
<ComboBox
|
<ComboBox
|
||||||
x:Name="cmbCoreSplitRouteType"
|
x:Name="cmbCoreSplitRouteType"
|
||||||
Grid.Row="2"
|
Grid.Row="3"
|
||||||
Grid.Column="1"
|
Grid.Column="1"
|
||||||
Width="200"
|
Width="200"
|
||||||
Margin="{StaticResource Margin8}"
|
Margin="{StaticResource Margin8}"
|
||||||
Style="{StaticResource DefComboBox}" />
|
Style="{StaticResource DefComboBox}" />
|
||||||
|
|
||||||
<TextBlock
|
<TextBlock
|
||||||
Grid.Row="3"
|
Grid.Row="4"
|
||||||
Grid.Column="0"
|
Grid.Column="0"
|
||||||
Margin="{StaticResource Margin8}"
|
Margin="{StaticResource Margin8}"
|
||||||
VerticalAlignment="Center"
|
VerticalAlignment="Center"
|
||||||
|
@ -1307,14 +1317,14 @@
|
||||||
Text="VMess" />
|
Text="VMess" />
|
||||||
<ComboBox
|
<ComboBox
|
||||||
x:Name="cmbCoreSplitType1"
|
x:Name="cmbCoreSplitType1"
|
||||||
Grid.Row="3"
|
Grid.Row="4"
|
||||||
Grid.Column="1"
|
Grid.Column="1"
|
||||||
Width="200"
|
Width="200"
|
||||||
Margin="{StaticResource Margin8}"
|
Margin="{StaticResource Margin8}"
|
||||||
Style="{StaticResource DefComboBox}" />
|
Style="{StaticResource DefComboBox}" />
|
||||||
|
|
||||||
<TextBlock
|
<TextBlock
|
||||||
Grid.Row="4"
|
Grid.Row="5"
|
||||||
Grid.Column="0"
|
Grid.Column="0"
|
||||||
Margin="{StaticResource Margin8}"
|
Margin="{StaticResource Margin8}"
|
||||||
VerticalAlignment="Center"
|
VerticalAlignment="Center"
|
||||||
|
@ -1322,14 +1332,14 @@
|
||||||
Text="Shadowsocks" />
|
Text="Shadowsocks" />
|
||||||
<ComboBox
|
<ComboBox
|
||||||
x:Name="cmbCoreSplitType3"
|
x:Name="cmbCoreSplitType3"
|
||||||
Grid.Row="4"
|
Grid.Row="5"
|
||||||
Grid.Column="1"
|
Grid.Column="1"
|
||||||
Width="200"
|
Width="200"
|
||||||
Margin="{StaticResource Margin8}"
|
Margin="{StaticResource Margin8}"
|
||||||
Style="{StaticResource DefComboBox}" />
|
Style="{StaticResource DefComboBox}" />
|
||||||
|
|
||||||
<TextBlock
|
<TextBlock
|
||||||
Grid.Row="5"
|
Grid.Row="6"
|
||||||
Grid.Column="0"
|
Grid.Column="0"
|
||||||
Margin="{StaticResource Margin8}"
|
Margin="{StaticResource Margin8}"
|
||||||
VerticalAlignment="Center"
|
VerticalAlignment="Center"
|
||||||
|
@ -1337,14 +1347,14 @@
|
||||||
Text="Socks" />
|
Text="Socks" />
|
||||||
<ComboBox
|
<ComboBox
|
||||||
x:Name="cmbCoreSplitType4"
|
x:Name="cmbCoreSplitType4"
|
||||||
Grid.Row="5"
|
Grid.Row="6"
|
||||||
Grid.Column="1"
|
Grid.Column="1"
|
||||||
Width="200"
|
Width="200"
|
||||||
Margin="{StaticResource Margin8}"
|
Margin="{StaticResource Margin8}"
|
||||||
Style="{StaticResource DefComboBox}" />
|
Style="{StaticResource DefComboBox}" />
|
||||||
|
|
||||||
<TextBlock
|
<TextBlock
|
||||||
Grid.Row="6"
|
Grid.Row="7"
|
||||||
Grid.Column="0"
|
Grid.Column="0"
|
||||||
Margin="{StaticResource Margin8}"
|
Margin="{StaticResource Margin8}"
|
||||||
VerticalAlignment="Center"
|
VerticalAlignment="Center"
|
||||||
|
@ -1352,14 +1362,14 @@
|
||||||
Text="VLESS" />
|
Text="VLESS" />
|
||||||
<ComboBox
|
<ComboBox
|
||||||
x:Name="cmbCoreSplitType5"
|
x:Name="cmbCoreSplitType5"
|
||||||
Grid.Row="6"
|
Grid.Row="7"
|
||||||
Grid.Column="1"
|
Grid.Column="1"
|
||||||
Width="200"
|
Width="200"
|
||||||
Margin="{StaticResource Margin8}"
|
Margin="{StaticResource Margin8}"
|
||||||
Style="{StaticResource DefComboBox}" />
|
Style="{StaticResource DefComboBox}" />
|
||||||
|
|
||||||
<TextBlock
|
<TextBlock
|
||||||
Grid.Row="7"
|
Grid.Row="8"
|
||||||
Grid.Column="0"
|
Grid.Column="0"
|
||||||
Margin="{StaticResource Margin8}"
|
Margin="{StaticResource Margin8}"
|
||||||
VerticalAlignment="Center"
|
VerticalAlignment="Center"
|
||||||
|
@ -1367,14 +1377,14 @@
|
||||||
Text="Trojan" />
|
Text="Trojan" />
|
||||||
<ComboBox
|
<ComboBox
|
||||||
x:Name="cmbCoreSplitType6"
|
x:Name="cmbCoreSplitType6"
|
||||||
Grid.Row="7"
|
Grid.Row="8"
|
||||||
Grid.Column="1"
|
Grid.Column="1"
|
||||||
Width="200"
|
Width="200"
|
||||||
Margin="{StaticResource Margin8}"
|
Margin="{StaticResource Margin8}"
|
||||||
Style="{StaticResource DefComboBox}" />
|
Style="{StaticResource DefComboBox}" />
|
||||||
|
|
||||||
<TextBlock
|
<TextBlock
|
||||||
Grid.Row="8"
|
Grid.Row="9"
|
||||||
Grid.Column="0"
|
Grid.Column="0"
|
||||||
Margin="{StaticResource Margin8}"
|
Margin="{StaticResource Margin8}"
|
||||||
VerticalAlignment="Center"
|
VerticalAlignment="Center"
|
||||||
|
@ -1382,14 +1392,14 @@
|
||||||
Text="Hysteria2" />
|
Text="Hysteria2" />
|
||||||
<ComboBox
|
<ComboBox
|
||||||
x:Name="cmbCoreSplitType7"
|
x:Name="cmbCoreSplitType7"
|
||||||
Grid.Row="8"
|
Grid.Row="9"
|
||||||
Grid.Column="1"
|
Grid.Column="1"
|
||||||
Width="200"
|
Width="200"
|
||||||
Margin="{StaticResource Margin8}"
|
Margin="{StaticResource Margin8}"
|
||||||
Style="{StaticResource DefComboBox}" />
|
Style="{StaticResource DefComboBox}" />
|
||||||
|
|
||||||
<TextBlock
|
<TextBlock
|
||||||
Grid.Row="9"
|
Grid.Row="10"
|
||||||
Grid.Column="0"
|
Grid.Column="0"
|
||||||
Margin="{StaticResource Margin8}"
|
Margin="{StaticResource Margin8}"
|
||||||
VerticalAlignment="Center"
|
VerticalAlignment="Center"
|
||||||
|
@ -1397,14 +1407,14 @@
|
||||||
Text="TUIC" />
|
Text="TUIC" />
|
||||||
<ComboBox
|
<ComboBox
|
||||||
x:Name="cmbCoreSplitType8"
|
x:Name="cmbCoreSplitType8"
|
||||||
Grid.Row="9"
|
Grid.Row="10"
|
||||||
Grid.Column="1"
|
Grid.Column="1"
|
||||||
Width="200"
|
Width="200"
|
||||||
Margin="{StaticResource Margin8}"
|
Margin="{StaticResource Margin8}"
|
||||||
Style="{StaticResource DefComboBox}" />
|
Style="{StaticResource DefComboBox}" />
|
||||||
|
|
||||||
<TextBlock
|
<TextBlock
|
||||||
Grid.Row="10"
|
Grid.Row="11"
|
||||||
Grid.Column="0"
|
Grid.Column="0"
|
||||||
Margin="{StaticResource Margin8}"
|
Margin="{StaticResource Margin8}"
|
||||||
VerticalAlignment="Center"
|
VerticalAlignment="Center"
|
||||||
|
@ -1412,13 +1422,14 @@
|
||||||
Text="Wireguard" />
|
Text="Wireguard" />
|
||||||
<ComboBox
|
<ComboBox
|
||||||
x:Name="cmbCoreSplitType9"
|
x:Name="cmbCoreSplitType9"
|
||||||
Grid.Row="10"
|
Grid.Row="11"
|
||||||
Grid.Column="1"
|
Grid.Column="1"
|
||||||
Width="200"
|
Width="200"
|
||||||
Margin="{StaticResource Margin8}"
|
Margin="{StaticResource Margin8}"
|
||||||
Style="{StaticResource DefComboBox}" />
|
Style="{StaticResource DefComboBox}" />
|
||||||
</Grid>
|
</Grid>
|
||||||
</Grid>
|
</Grid>
|
||||||
|
</ScrollViewer>
|
||||||
</TabItem>
|
</TabItem>
|
||||||
</TabControl>
|
</TabControl>
|
||||||
</DockPanel>
|
</DockPanel>
|
||||||
|
|
Loading…
Reference in a new issue