This commit is contained in:
DHR60 2025-07-24 12:51:17 +08:00
parent b8dbe61db3
commit 0a2b4374f9
22 changed files with 748 additions and 399 deletions

View file

@ -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 =

View file

@ -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();

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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;
} }

View file

@ -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;
} }

View file

@ -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);

View file

@ -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);
} }

View file

@ -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);
} }

View file

@ -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);
} }

View file

@ -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);

View file

@ -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);
} }

View file

@ -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;

View file

@ -802,101 +802,298 @@
</TabItem> </TabItem>
<TabItem Header="{x:Static resx:ResUI.TbSettingsCoreType}"> <TabItem Header="{x:Static resx:ResUI.TbSettingsCoreType}">
<Grid <ScrollViewer VerticalScrollBarVisibility="Visible">
Margin="{StaticResource Margin4}" <Grid Margin="{StaticResource Margin4}">
ColumnDefinitions="Auto,Auto" <Grid.RowDefinitions>
RowDefinitions="Auto,Auto,Auto,Auto,Auto,Auto,Auto,Auto"> <RowDefinition Height="Auto" />
<TextBlock </Grid.RowDefinitions>
Grid.Row="1" <Grid.ColumnDefinitions>
Grid.Column="0" <ColumnDefinition Width="Auto" />
Margin="{StaticResource Margin4}" <ColumnDefinition Width="Auto" />
VerticalAlignment="Center" </Grid.ColumnDefinitions>
Text="VMess" />
<ComboBox
x:Name="cmbCoreType1"
Grid.Row="1"
Grid.Column="1"
Width="200"
Margin="{StaticResource Margin4}" />
<TextBlock <Grid
Grid.Row="2" Grid.Row="0"
Grid.Column="0" Grid.Column="0"
Margin="{StaticResource Margin4}" Margin="{StaticResource Margin4}">
VerticalAlignment="Center" <Grid.RowDefinitions>
Text="Custom" /> <RowDefinition Height="Auto" />
<ComboBox <RowDefinition Height="Auto" />
x:Name="cmbCoreType2" <RowDefinition Height="Auto" />
Grid.Row="2" <RowDefinition Height="Auto" />
Grid.Column="1" <RowDefinition Height="Auto" />
Width="200" <RowDefinition Height="Auto" />
Margin="{StaticResource Margin4}" /> <RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<TextBlock <TextBlock
Grid.Row="3" Grid.Row="1"
Grid.Column="0" Grid.Column="0"
Margin="{StaticResource Margin4}" Margin="{StaticResource Margin4}"
VerticalAlignment="Center" VerticalAlignment="Center"
Text="Shadowsocks" /> Text="VMess" />
<ComboBox <ComboBox
x:Name="cmbCoreType3" x:Name="cmbCoreType1"
Grid.Row="3" Grid.Row="1"
Grid.Column="1" Grid.Column="1"
Width="200" Width="200"
Margin="{StaticResource Margin4}" /> Margin="{StaticResource Margin4}" />
<TextBlock <TextBlock
Grid.Row="4" Grid.Row="2"
Grid.Column="0" Grid.Column="0"
Margin="{StaticResource Margin4}" Margin="{StaticResource Margin4}"
VerticalAlignment="Center" VerticalAlignment="Center"
Text="Socks" /> Text="Custom" />
<ComboBox <ComboBox
x:Name="cmbCoreType4" x:Name="cmbCoreType2"
Grid.Row="4" Grid.Row="2"
Grid.Column="1" Grid.Column="1"
Width="200" Width="200"
Margin="{StaticResource Margin4}" /> Margin="{StaticResource Margin4}" />
<TextBlock <TextBlock
Grid.Row="5" Grid.Row="3"
Grid.Column="0" Grid.Column="0"
Margin="{StaticResource Margin4}" Margin="{StaticResource Margin4}"
VerticalAlignment="Center" VerticalAlignment="Center"
Text="VLESS" /> Text="Shadowsocks" />
<ComboBox <ComboBox
x:Name="cmbCoreType5" x:Name="cmbCoreType3"
Grid.Row="5" Grid.Row="3"
Grid.Column="1" Grid.Column="1"
Width="200" Width="200"
Margin="{StaticResource Margin4}" /> Margin="{StaticResource Margin4}" />
<TextBlock <TextBlock
Grid.Row="6" Grid.Row="4"
Grid.Column="0" Grid.Column="0"
Margin="{StaticResource Margin4}" Margin="{StaticResource Margin4}"
VerticalAlignment="Center" VerticalAlignment="Center"
Text="Trojan" /> Text="Socks" />
<ComboBox <ComboBox
x:Name="cmbCoreType6" x:Name="cmbCoreType4"
Grid.Row="6" Grid.Row="4"
Grid.Column="1" Grid.Column="1"
Width="200" Width="200"
Margin="{StaticResource Margin4}" /> Margin="{StaticResource Margin4}" />
<TextBlock <TextBlock
Grid.Row="7" Grid.Row="5"
Grid.Column="0" Grid.Column="0"
Margin="{StaticResource Margin4}" Margin="{StaticResource Margin4}"
VerticalAlignment="Center" VerticalAlignment="Center"
Text="Wireguard" /> Text="VLESS" />
<ComboBox <ComboBox
x:Name="cmbCoreType9" x:Name="cmbCoreType5"
Grid.Row="7" Grid.Row="5"
Grid.Column="1" Grid.Column="1"
Width="200" Width="200"
Margin="{StaticResource Margin4}" /> Margin="{StaticResource Margin4}" />
</Grid>
<TextBlock
Grid.Row="6"
Grid.Column="0"
Margin="{StaticResource Margin4}"
VerticalAlignment="Center"
Text="Trojan" />
<ComboBox
x:Name="cmbCoreType6"
Grid.Row="6"
Grid.Column="1"
Width="200"
Margin="{StaticResource Margin4}" />
<TextBlock
Grid.Row="7"
Grid.Column="0"
Margin="{StaticResource Margin4}"
VerticalAlignment="Center"
Text="Wireguard" />
<ComboBox
x:Name="cmbCoreType9"
Grid.Row="7"
Grid.Column="1"
Width="200"
Margin="{StaticResource Margin4}" />
</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>

View file

@ -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);
}); });

View file

@ -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;

View file

@ -1107,318 +1107,329 @@
</TabItem> </TabItem>
<TabItem Header="{x:Static resx:ResUI.TbSettingsCoreType}"> <TabItem Header="{x:Static resx:ResUI.TbSettingsCoreType}">
<Grid Margin="{StaticResource Margin8}"> <ScrollViewer VerticalScrollBarVisibility="Visible">
<Grid.RowDefinitions> <Grid Margin="{StaticResource Margin8}">
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<Grid
Grid.Row="0"
Grid.Column="0"
Margin="{StaticResource Margin8}">
<Grid.RowDefinitions> <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" />
</Grid.RowDefinitions> </Grid.RowDefinitions>
<Grid.ColumnDefinitions> <Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" /> <ColumnDefinition Width="Auto" />
<ColumnDefinition Width="Auto" /> <ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions> </Grid.ColumnDefinitions>
<TextBlock <Grid
Grid.Row="1"
Grid.Column="0"
Margin="{StaticResource Margin8}"
VerticalAlignment="Center"
Style="{StaticResource ToolbarTextBlock}"
Text="VMess" />
<ComboBox
x:Name="cmbCoreType1"
Grid.Row="1"
Grid.Column="1"
Width="200"
Margin="{StaticResource Margin8}"
Style="{StaticResource DefComboBox}" />
<TextBlock
Grid.Row="2"
Grid.Column="0"
Margin="{StaticResource Margin8}"
VerticalAlignment="Center"
Style="{StaticResource ToolbarTextBlock}"
Text="Custom" />
<ComboBox
x:Name="cmbCoreType2"
Grid.Row="2"
Grid.Column="1"
Width="200"
Margin="{StaticResource Margin8}"
Style="{StaticResource DefComboBox}" />
<TextBlock
Grid.Row="3"
Grid.Column="0"
Margin="{StaticResource Margin8}"
VerticalAlignment="Center"
Style="{StaticResource ToolbarTextBlock}"
Text="Shadowsocks" />
<ComboBox
x:Name="cmbCoreType3"
Grid.Row="3"
Grid.Column="1"
Width="200"
Margin="{StaticResource Margin8}"
Style="{StaticResource DefComboBox}" />
<TextBlock
Grid.Row="4"
Grid.Column="0"
Margin="{StaticResource Margin8}"
VerticalAlignment="Center"
Style="{StaticResource ToolbarTextBlock}"
Text="Socks" />
<ComboBox
x:Name="cmbCoreType4"
Grid.Row="4"
Grid.Column="1"
Width="200"
Margin="{StaticResource Margin8}"
Style="{StaticResource DefComboBox}" />
<TextBlock
Grid.Row="5"
Grid.Column="0"
Margin="{StaticResource Margin8}"
VerticalAlignment="Center"
Style="{StaticResource ToolbarTextBlock}"
Text="VLESS" />
<ComboBox
x:Name="cmbCoreType5"
Grid.Row="5"
Grid.Column="1"
Width="200"
Margin="{StaticResource Margin8}"
Style="{StaticResource DefComboBox}" />
<TextBlock
Grid.Row="6"
Grid.Column="0"
Margin="{StaticResource Margin8}"
VerticalAlignment="Center"
Style="{StaticResource ToolbarTextBlock}"
Text="Trojan" />
<ComboBox
x:Name="cmbCoreType6"
Grid.Row="6"
Grid.Column="1"
Width="200"
Margin="{StaticResource Margin8}"
Style="{StaticResource DefComboBox}" />
<TextBlock
Grid.Row="7"
Grid.Column="0"
Margin="{StaticResource Margin8}"
VerticalAlignment="Center"
Style="{StaticResource ToolbarTextBlock}"
Text="Wireguard" />
<ComboBox
x:Name="cmbCoreType9"
Grid.Row="7"
Grid.Column="1"
Width="200"
Margin="{StaticResource Margin8}"
Style="{StaticResource DefComboBox}" />
</Grid>
<Grid
Grid.Row="0"
Grid.Column="1"
Margin="{StaticResource Margin8}">
<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.Row="0"
Grid.Column="0" Grid.Column="0"
Grid.ColumnSpan="2" Margin="{StaticResource Margin8}">
Margin="{StaticResource Margin8}" <Grid.RowDefinitions>
VerticalAlignment="Center" <RowDefinition Height="Auto" />
Style="{StaticResource ToolbarTextBlock}" <RowDefinition Height="Auto" />
Text="出站与路由分离,出站与分流 Core 类型不同时,将启用两个核心" /> <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="1"
Grid.Column="0"
Margin="{StaticResource Margin8}"
VerticalAlignment="Center"
Style="{StaticResource ToolbarTextBlock}"
Text="VMess" />
<ComboBox
x:Name="cmbCoreType1"
Grid.Row="1"
Grid.Column="1"
Width="200"
Margin="{StaticResource Margin8}"
Style="{StaticResource DefComboBox}" />
<TextBlock <TextBlock
Grid.Row="1" Grid.Row="2"
Grid.Column="0" Grid.Column="0"
Margin="{StaticResource Margin8}" Margin="{StaticResource Margin8}"
VerticalAlignment="Center" VerticalAlignment="Center"
Style="{StaticResource ToolbarTextBlock}" Style="{StaticResource ToolbarTextBlock}"
Text="出站与路由分离" /> Text="Custom" />
<ToggleButton <ComboBox
x:Name="togCoreSplit" x:Name="cmbCoreType2"
Grid.Row="1" Grid.Row="2"
Grid.Column="1" Grid.Column="1"
Margin="{StaticResource Margin8}" Width="200"
HorizontalAlignment="Left" /> Margin="{StaticResource Margin8}"
Style="{StaticResource DefComboBox}" />
<TextBlock <TextBlock
Grid.Row="2" Grid.Row="3"
Grid.Column="0" Grid.Column="0"
Margin="{StaticResource Margin8}" Margin="{StaticResource Margin8}"
VerticalAlignment="Center" VerticalAlignment="Center"
Style="{StaticResource ToolbarTextBlock}" Style="{StaticResource ToolbarTextBlock}"
Text="路由 Core" /> Text="Shadowsocks" />
<ComboBox <ComboBox
x:Name="cmbCoreSplitRouteType" x:Name="cmbCoreType3"
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"
Style="{StaticResource ToolbarTextBlock}" Style="{StaticResource ToolbarTextBlock}"
Text="VMess" /> Text="Socks" />
<ComboBox <ComboBox
x:Name="cmbCoreSplitType1" x:Name="cmbCoreType4"
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"
Style="{StaticResource ToolbarTextBlock}" Style="{StaticResource ToolbarTextBlock}"
Text="Shadowsocks" /> Text="VLESS" />
<ComboBox <ComboBox
x:Name="cmbCoreSplitType3" x:Name="cmbCoreType5"
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"
Style="{StaticResource ToolbarTextBlock}" Style="{StaticResource ToolbarTextBlock}"
Text="Socks" /> Text="Trojan" />
<ComboBox <ComboBox
x:Name="cmbCoreSplitType4" x:Name="cmbCoreType6"
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"
Style="{StaticResource ToolbarTextBlock}" Style="{StaticResource ToolbarTextBlock}"
Text="VLESS" /> Text="Wireguard" />
<ComboBox <ComboBox
x:Name="cmbCoreSplitType5" x:Name="cmbCoreType9"
Grid.Row="6" Grid.Row="7"
Grid.Column="1"
Width="200"
Margin="{StaticResource Margin8}"
Style="{StaticResource DefComboBox}" />
</Grid>
<Grid
Grid.Row="0"
Grid.Column="1" Grid.Column="1"
Width="200" Margin="{StaticResource Margin8}">
Margin="{StaticResource Margin8}" <Grid.RowDefinitions>
Style="{StaticResource DefComboBox}" /> <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 Margin8}"
VerticalAlignment="Center"
Style="{StaticResource ToolbarTextBlock}"
Text="{x:Static resx:ResUI.TbSettingsSplitCoreDoc1}" />
<TextBlock <TextBlock
Grid.Row="7" Grid.Row="1"
Grid.Column="0" Grid.Column="0"
Margin="{StaticResource Margin8}" Grid.ColumnSpan="2"
VerticalAlignment="Center" Margin="{StaticResource Margin8}"
Style="{StaticResource ToolbarTextBlock}" VerticalAlignment="Center"
Text="Trojan" /> Style="{StaticResource ToolbarTextBlock}"
<ComboBox Text="{x:Static resx:ResUI.TbSettingsSplitCoreDoc2}" />
x:Name="cmbCoreSplitType6"
Grid.Row="7"
Grid.Column="1"
Width="200"
Margin="{StaticResource Margin8}"
Style="{StaticResource DefComboBox}" />
<TextBlock <TextBlock
Grid.Row="8" Grid.Row="2"
Grid.Column="0" Grid.Column="0"
Margin="{StaticResource Margin8}" Margin="{StaticResource Margin8}"
VerticalAlignment="Center" VerticalAlignment="Center"
Style="{StaticResource ToolbarTextBlock}" Style="{StaticResource ToolbarTextBlock}"
Text="Hysteria2" /> Text="{x:Static resx:ResUI.TbSettingsSplitCoreEnable}" />
<ComboBox <ToggleButton
x:Name="cmbCoreSplitType7" x:Name="togCoreSplit"
Grid.Row="8" Grid.Row="2"
Grid.Column="1" Grid.Column="1"
Width="200" Margin="{StaticResource Margin8}"
Margin="{StaticResource Margin8}" HorizontalAlignment="Left" />
Style="{StaticResource DefComboBox}" />
<TextBlock <TextBlock
Grid.Row="9" Grid.Row="3"
Grid.Column="0" Grid.Column="0"
Margin="{StaticResource Margin8}" Margin="{StaticResource Margin8}"
VerticalAlignment="Center" VerticalAlignment="Center"
Style="{StaticResource ToolbarTextBlock}" Style="{StaticResource ToolbarTextBlock}"
Text="TUIC" /> Text="路由 Core" />
<ComboBox <ComboBox
x:Name="cmbCoreSplitType8" x:Name="cmbCoreSplitRouteType"
Grid.Row="9" 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="10" Grid.Row="4"
Grid.Column="0" Grid.Column="0"
Margin="{StaticResource Margin8}" Margin="{StaticResource Margin8}"
VerticalAlignment="Center" VerticalAlignment="Center"
Style="{StaticResource ToolbarTextBlock}" Style="{StaticResource ToolbarTextBlock}"
Text="Wireguard" /> Text="VMess" />
<ComboBox <ComboBox
x:Name="cmbCoreSplitType9" x:Name="cmbCoreSplitType1"
Grid.Row="10" 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
Grid.Row="5"
Grid.Column="0"
Margin="{StaticResource Margin8}"
VerticalAlignment="Center"
Style="{StaticResource ToolbarTextBlock}"
Text="Shadowsocks" />
<ComboBox
x:Name="cmbCoreSplitType3"
Grid.Row="5"
Grid.Column="1"
Width="200"
Margin="{StaticResource Margin8}"
Style="{StaticResource DefComboBox}" />
<TextBlock
Grid.Row="6"
Grid.Column="0"
Margin="{StaticResource Margin8}"
VerticalAlignment="Center"
Style="{StaticResource ToolbarTextBlock}"
Text="Socks" />
<ComboBox
x:Name="cmbCoreSplitType4"
Grid.Row="6"
Grid.Column="1"
Width="200"
Margin="{StaticResource Margin8}"
Style="{StaticResource DefComboBox}" />
<TextBlock
Grid.Row="7"
Grid.Column="0"
Margin="{StaticResource Margin8}"
VerticalAlignment="Center"
Style="{StaticResource ToolbarTextBlock}"
Text="VLESS" />
<ComboBox
x:Name="cmbCoreSplitType5"
Grid.Row="7"
Grid.Column="1"
Width="200"
Margin="{StaticResource Margin8}"
Style="{StaticResource DefComboBox}" />
<TextBlock
Grid.Row="8"
Grid.Column="0"
Margin="{StaticResource Margin8}"
VerticalAlignment="Center"
Style="{StaticResource ToolbarTextBlock}"
Text="Trojan" />
<ComboBox
x:Name="cmbCoreSplitType6"
Grid.Row="8"
Grid.Column="1"
Width="200"
Margin="{StaticResource Margin8}"
Style="{StaticResource DefComboBox}" />
<TextBlock
Grid.Row="9"
Grid.Column="0"
Margin="{StaticResource Margin8}"
VerticalAlignment="Center"
Style="{StaticResource ToolbarTextBlock}"
Text="Hysteria2" />
<ComboBox
x:Name="cmbCoreSplitType7"
Grid.Row="9"
Grid.Column="1"
Width="200"
Margin="{StaticResource Margin8}"
Style="{StaticResource DefComboBox}" />
<TextBlock
Grid.Row="10"
Grid.Column="0"
Margin="{StaticResource Margin8}"
VerticalAlignment="Center"
Style="{StaticResource ToolbarTextBlock}"
Text="TUIC" />
<ComboBox
x:Name="cmbCoreSplitType8"
Grid.Row="10"
Grid.Column="1"
Width="200"
Margin="{StaticResource Margin8}"
Style="{StaticResource DefComboBox}" />
<TextBlock
Grid.Row="11"
Grid.Column="0"
Margin="{StaticResource Margin8}"
VerticalAlignment="Center"
Style="{StaticResource ToolbarTextBlock}"
Text="Wireguard" />
<ComboBox
x:Name="cmbCoreSplitType9"
Grid.Row="11"
Grid.Column="1"
Width="200"
Margin="{StaticResource Margin8}"
Style="{StaticResource DefComboBox}" />
</Grid>
</Grid> </Grid>
</Grid> </ScrollViewer>
</TabItem> </TabItem>
</TabControl> </TabControl>
</DockPanel> </DockPanel>