Compare commits

..

25 Commits
7.9.0 ... 7.9.3

Author SHA1 Message Date
2dust
064a04fbad up 7.9.3 2025-02-21 17:47:30 +08:00
2dust
39ed13cf8a Create build-all.yml 2025-02-21 17:38:47 +08:00
2dust
a1edacb196 Update UpdateService.cs 2025-02-21 17:37:36 +08:00
2dust
c9f79e4b47 Added update function for Country.mmdb, geoip-only-cn-private.dat, geoip.metadb
https://github.com/2dust/v2rayN/issues/6752
2025-02-21 15:38:11 +08:00
2dust
40c1498226 When testing speed, skip items with incorrect latency 2025-02-21 14:33:43 +08:00
2dust
390061f9bd Fix the desktop UI bug 2025-02-21 12:40:45 +08:00
2dust
42324a2c9e Adjust controls margin 2025-02-20 18:34:25 +08:00
2dust
b9b4ca6360 The desktop version use SemiFontFamilyRegular, Fall back to built-in fonts 2025-02-20 16:23:46 +08:00
2dust
565697bc0b The desktop version unified icon size 2025-02-20 14:32:38 +08:00
2dust
2e6c82c851 Adjust UI
https://github.com/2dust/v2rayN/issues/6751
2025-02-20 14:07:12 +08:00
2dust
ee75dd37af The desktop version add wrap to the subscription group 2025-02-20 11:08:28 +08:00
2dust
4859dcda08 up 7.9.2 2025-02-19 21:10:47 +08:00
2dust
2e962e555d Use AutoCompleteBox instead of editable Combobox for desktop
Thanks to https://github.com/irihitech/Ursa.Avalonia
2025-02-19 17:41:58 +08:00
2dust
ab73e5acb2 Micro-adjustment interface 2025-02-19 17:39:47 +08:00
2dust
4e3e5ce130 Add CanUserReorderColumns for desktop 2025-02-19 15:03:29 +08:00
2dust
bb8eef3bf5 Removed the Hide to tray when closing the window feature for Windows version
https://github.com/2dust/v2rayN/issues/6726
2025-02-19 10:42:31 +08:00
2dust
eee87ded29 Fix cache.db storage location
https://github.com/2dust/v2rayN/issues/6731
2025-02-19 10:06:47 +08:00
2dust
e0f005bd96 up 7.9.1 2025-02-18 18:58:19 +08:00
2dust
2cacc372ad Optimize desktop DataGrid RowHeight adjusts with font size 2025-02-18 18:48:29 +08:00
2dust
0b1b681655 Add system proxy pac to the Windows desktop version 2025-02-18 14:38:08 +08:00
2dust
deafd73306 Optimize RemoveInvalidServerResult 2025-02-17 20:00:28 +08:00
2dust
317a5da120 up build 2025-02-17 14:38:26 +08:00
bonjour
071cefc511 Revert "Fix Package AppImage script (#6681)" (#6714)
This reverts commit 41cc260b5c.
2025-02-17 13:59:36 +08:00
2dust
32a5cc8aa3 Check for avalonia desktop windows version 2025-02-17 12:27:00 +08:00
2dust
c41378a085 Update build-windows-desktop.yml 2025-02-17 12:24:55 +08:00
52 changed files with 997 additions and 826 deletions

69
.github/workflows/build-all.yml vendored Normal file
View File

@@ -0,0 +1,69 @@
name: release all platforms
on:
workflow_dispatch:
inputs:
release_tag:
required: false
type: string
jobs:
update:
runs-on: ubuntu-latest
steps:
- name: Trigger build windows
if: github.event.inputs.release_tag != ''
run: |
curl -X POST \
-H "Accept: application/vnd.github.v3+json" \
-H "Authorization: token ${{ secrets.GITHUB_TOKEN }}" \
https://api.github.com/repos/${{ github.repository }}/actions/workflows/build-windows.yml/dispatches \
-d "{
\"ref\": \"master\",
\"inputs\": {
\"release_tag\": \"${{ github.event.inputs.release_tag }}\"
}
}"
- name: Trigger build linux
if: github.event.inputs.release_tag != ''
run: |
curl -X POST \
-H "Accept: application/vnd.github.v3+json" \
-H "Authorization: token ${{ secrets.GITHUB_TOKEN }}" \
https://api.github.com/repos/${{ github.repository }}/actions/workflows/build-linux.yml/dispatches \
-d "{
\"ref\": \"master\",
\"inputs\": {
\"release_tag\": \"${{ github.event.inputs.release_tag }}\"
}
}"
- name: Trigger build osx
if: github.event.inputs.release_tag != ''
run: |
curl -X POST \
-H "Accept: application/vnd.github.v3+json" \
-H "Authorization: token ${{ secrets.GITHUB_TOKEN }}" \
https://api.github.com/repos/${{ github.repository }}/actions/workflows/build-osx.yml/dispatches \
-d "{
\"ref\": \"master\",
\"inputs\": {
\"release_tag\": \"${{ github.event.inputs.release_tag }}\"
}
}"
- name: Trigger build windows desktop
if: github.event.inputs.release_tag != ''
run: |
curl -X POST \
-H "Accept: application/vnd.github.v3+json" \
-H "Authorization: token ${{ secrets.GITHUB_TOKEN }}" \
https://api.github.com/repos/${{ github.repository }}/actions/workflows/build-windows-desktop.yml/dispatches \
-d "{
\"ref\": \"master\",
\"inputs\": {
\"release_tag\": \"${{ github.event.inputs.release_tag }}\"
}
}"

View File

@@ -36,10 +36,10 @@ jobs:
- name: Build - name: Build
run: | run: |
cd v2rayN cd v2rayN
dotnet publish ./v2rayN.Desktop/v2rayN.Desktop.csproj -c Release -r linux-x64 --self-contained=true -p:PublishReadyToRun=false -p:PublishSingleFile=true -o $OutputPath64 dotnet publish ./v2rayN.Desktop/v2rayN.Desktop.csproj -c Release -r linux-x64 --self-contained=true -o $OutputPath64
dotnet publish ./v2rayN.Desktop/v2rayN.Desktop.csproj -c Release -r linux-arm64 --self-contained=true -p:PublishReadyToRun=false -p:PublishSingleFile=true -o $OutputPathArm64 dotnet publish ./v2rayN.Desktop/v2rayN.Desktop.csproj -c Release -r linux-arm64 --self-contained=true -o $OutputPathArm64
dotnet publish ./AmazTool/AmazTool.csproj -c Release -r linux-x64 --self-contained=true -p:PublishReadyToRun=false -p:PublishSingleFile=true -p:PublishTrimmed=true -o $OutputPath64 dotnet publish ./AmazTool/AmazTool.csproj -c Release -r linux-x64 --self-contained=true -p:PublishTrimmed=true -o $OutputPath64
dotnet publish ./AmazTool/AmazTool.csproj -c Release -r linux-arm64 --self-contained=true -p:PublishReadyToRun=false -p:PublishSingleFile=true -p:PublishTrimmed=true -o $OutputPathArm64 dotnet publish ./AmazTool/AmazTool.csproj -c Release -r linux-arm64 --self-contained=true -p:PublishTrimmed=true -o $OutputPathArm64
- name: Upload build artifacts - name: Upload build artifacts
uses: actions/upload-artifact@v4.6.0 uses: actions/upload-artifact@v4.6.0

View File

@@ -36,10 +36,10 @@ jobs:
- name: Build - name: Build
run: | run: |
cd v2rayN cd v2rayN
dotnet publish ./v2rayN.Desktop/v2rayN.Desktop.csproj -c Release -r osx-x64 --self-contained=true -p:PublishReadyToRun=false -p:PublishSingleFile=true -o $OutputPath64 dotnet publish ./v2rayN.Desktop/v2rayN.Desktop.csproj -c Release -r osx-x64 --self-contained=true -o $OutputPath64
dotnet publish ./v2rayN.Desktop/v2rayN.Desktop.csproj -c Release -r osx-arm64 --self-contained=true -p:PublishReadyToRun=false -p:PublishSingleFile=true -o $OutputPathArm64 dotnet publish ./v2rayN.Desktop/v2rayN.Desktop.csproj -c Release -r osx-arm64 --self-contained=true -o $OutputPathArm64
dotnet publish ./AmazTool/AmazTool.csproj -c Release -r osx-x64 --self-contained=true -p:PublishReadyToRun=false -p:PublishSingleFile=true -p:PublishTrimmed=true -o $OutputPath64 dotnet publish ./AmazTool/AmazTool.csproj -c Release -r osx-x64 --self-contained=true -p:PublishTrimmed=true -o $OutputPath64
dotnet publish ./AmazTool/AmazTool.csproj -c Release -r osx-arm64 --self-contained=true -p:PublishReadyToRun=false -p:PublishSingleFile=true -p:PublishTrimmed=true -o $OutputPathArm64 dotnet publish ./AmazTool/AmazTool.csproj -c Release -r osx-arm64 --self-contained=true -p:PublishTrimmed=true -o $OutputPathArm64
- name: Upload build artifacts - name: Upload build artifacts
uses: actions/upload-artifact@v4.6.0 uses: actions/upload-artifact@v4.6.0

View File

@@ -36,10 +36,10 @@ jobs:
- name: Build - name: Build
run: | run: |
cd v2rayN cd v2rayN
dotnet publish ./v2rayN.Desktop/v2rayN.Desktop.csproj -c Release -r win-x64 --self-contained=true -p:PublishReadyToRun=false -p:PublishSingleFile=true -p:EnableWindowsTargeting=true -o $OutputPath64 dotnet publish ./v2rayN.Desktop/v2rayN.Desktop.csproj -c Release -r win-x64 --self-contained=true -p:EnableWindowsTargeting=true -o $OutputPath64
dotnet publish ./v2rayN.Desktop/v2rayN.Desktop.csproj -c Release -r win-arm64 --self-contained=true -p:PublishReadyToRun=false -p:PublishSingleFile=true -p:EnableWindowsTargeting=true -o $OutputPathArm64 dotnet publish ./v2rayN.Desktop/v2rayN.Desktop.csproj -c Release -r win-arm64 --self-contained=true -p:EnableWindowsTargeting=true -o $OutputPathArm64
dotnet publish ./AmazTool/AmazTool.csproj -c Release -r win-x64 --self-contained=true -p:PublishReadyToRun=false -p:PublishSingleFile=true -p:PublishTrimmed=true -p:EnableWindowsTargeting=true -o $OutputPath64 dotnet publish ./AmazTool/AmazTool.csproj -c Release -r win-x64 --self-contained=true -p:EnableWindowsTargeting=true -p:PublishTrimmed=true -o $OutputPath64
dotnet publish ./AmazTool/AmazTool.csproj -c Release -r win-arm64 --self-contained=true -p:PublishReadyToRun=false -p:PublishSingleFile=true -p:PublishTrimmed=true -p:EnableWindowsTargeting=true -o $OutputPathArm64 dotnet publish ./AmazTool/AmazTool.csproj -c Release -r win-arm64 --self-contained=true -p:EnableWindowsTargeting=true -p:PublishTrimmed=true -o $OutputPathArm64
- name: Upload build artifacts - name: Upload build artifacts
uses: actions/upload-artifact@v4.6.0 uses: actions/upload-artifact@v4.6.0
@@ -47,4 +47,22 @@ jobs:
name: v2rayN-windows-desktop name: v2rayN-windows-desktop
path: | path: |
${{ github.workspace }}/v2rayN/Release/windows* ${{ github.workspace }}/v2rayN/Release/windows*
# release zip archive
- name: Package release zip archive
if: github.event.inputs.release_tag != ''
run: |
chmod 755 package-release-zip.sh
./package-release-zip.sh $OutputArch $OutputPath64
mv "v2rayN-${OutputArch}.zip" "v2rayN-${OutputArch}-desktop.zip"
./package-release-zip.sh $OutputArchArm $OutputPathArm64
mv "v2rayN-${OutputArchArm}.zip" "v2rayN-${OutputArchArm}-desktop.zip"
- name: Upload zip archive to release
uses: svenstaro/upload-release-action@v2
if: github.event.inputs.release_tag != ''
with:
file: ${{ github.workspace }}/v2rayN*.zip
tag: ${{ github.event.inputs.release_tag }}
file_glob: true
prerelease: true

View File

@@ -37,12 +37,12 @@ jobs:
- name: Build - name: Build
run: | run: |
cd v2rayN cd v2rayN
dotnet publish ./v2rayN/v2rayN.csproj -c Release -r win-x64 --self-contained=false -p:PublishReadyToRun=false -p:PublishSingleFile=true -p:EnableWindowsTargeting=true -o $OutputPath64 dotnet publish ./v2rayN/v2rayN.csproj -c Release -r win-x64 --self-contained=false -p:EnableWindowsTargeting=true -o $OutputPath64
dotnet publish ./v2rayN/v2rayN.csproj -c Release -r win-arm64 --self-contained=false -p:PublishReadyToRun=false -p:PublishSingleFile=true -p:EnableWindowsTargeting=true -o $OutputPathArm64 dotnet publish ./v2rayN/v2rayN.csproj -c Release -r win-arm64 --self-contained=false -p:EnableWindowsTargeting=true -o $OutputPathArm64
dotnet publish ./v2rayN/v2rayN.csproj -c Release -r win-x64 --self-contained=true -p:PublishReadyToRun=false -p:PublishSingleFile=true -p:EnableWindowsTargeting=true -o $OutputPath64Sc dotnet publish ./v2rayN/v2rayN.csproj -c Release -r win-x64 --self-contained=true -p:EnableWindowsTargeting=true -o $OutputPath64Sc
dotnet publish ./AmazTool/AmazTool.csproj -c Release -r win-x64 --self-contained=false -p:PublishReadyToRun=false -p:PublishSingleFile=true -p:EnableWindowsTargeting=true -o $OutputPath64 dotnet publish ./AmazTool/AmazTool.csproj -c Release -r win-x64 --self-contained=false -p:EnableWindowsTargeting=true -o $OutputPath64
dotnet publish ./AmazTool/AmazTool.csproj -c Release -r win-arm64 --self-contained=false -p:PublishReadyToRun=false -p:PublishSingleFile=true -p:EnableWindowsTargeting=true -o $OutputPathArm64 dotnet publish ./AmazTool/AmazTool.csproj -c Release -r win-arm64 --self-contained=false -p:EnableWindowsTargeting=true -o $OutputPathArm64
dotnet publish ./AmazTool/AmazTool.csproj -c Release -r win-x64 --self-contained=true -p:PublishReadyToRun=false -p:PublishSingleFile=true -p:PublishTrimmed=true -p:EnableWindowsTargeting=true -o $OutputPath64Sc dotnet publish ./AmazTool/AmazTool.csproj -c Release -r win-x64 --self-contained=true -p:EnableWindowsTargeting=true -p:PublishTrimmed=true -o $OutputPath64Sc
- name: Upload build artifacts - name: Upload build artifacts

View File

@@ -17,11 +17,9 @@ echo "When this file exists, app will not store configs under this folder" >"${P
if [ $Arch = "linux-64" ]; then if [ $Arch = "linux-64" ]; then
Arch2="x86_64" Arch2="x86_64"
Arch3="amd64" Arch3="amd64"
Interpreter="ld-linux-x86-64.so.2"
else else
Arch2="aarch64" Arch2="aarch64"
Arch3="arm64" Arch3="arm64"
Interpreter="ld-linux-aarch64.so.1"
fi fi
echo $Arch2 echo $Arch2
@@ -31,7 +29,6 @@ cat >"${PackagePath}/AppDir/AppRun" <<-EOF
HERE="\$(dirname "\$(readlink -f "\${0}")")" HERE="\$(dirname "\$(readlink -f "\${0}")")"
export PATH="\${HERE}"/opt/v2rayN/:"\${PATH}" export PATH="\${HERE}"/opt/v2rayN/:"\${PATH}"
export LD_LIBRARY_PATH="\${HERE}"/opt/v2rayN/:"\${LD_LIBRARY_PATH}" export LD_LIBRARY_PATH="\${HERE}"/opt/v2rayN/:"\${LD_LIBRARY_PATH}"
cd "\${HERE}/opt/v2rayN"
exec "\${HERE}/opt/v2rayN/v2rayN" \$@ exec "\${HERE}/opt/v2rayN/v2rayN" \$@
EOF EOF
@@ -48,41 +45,9 @@ EOF
sudo cp "${PackagePath}/AppDir/opt/v2rayN/v2rayN.png" "${PackagePath}/AppDir/v2rayN.png" sudo cp "${PackagePath}/AppDir/opt/v2rayN/v2rayN.png" "${PackagePath}/AppDir/v2rayN.png"
sudo dpkg --add-architecture ${Arch3} sudo dpkg --add-architecture ${Arch3}
sudo apt update
mkdir deb_folder mkdir deb_folder
cd deb_folder cd deb_folder
apt download libstdc++6:${Arch3} apt download libicu74:${Arch3}
apt download libc6:${Arch3}
apt download libcrypt1:${Arch3}
apt download libgcc-s1:${Arch3}
apt download libidn2-0:${Arch3}
apt download gcc-12-base:${Arch3}
apt download zlib1g:${Arch3}
apt download libfreetype6:${Arch3}
apt download libexpat1:${Arch3}
apt download libbrotli1:${Arch3}
apt download libx11-6:${Arch3}
apt download libx11-xcb1:${Arch3}
apt download libxcb1:${Arch3}
apt download libxau6:${Arch3}
apt download libxdmcp6:${Arch3}
apt download libbsd0:${Arch3}
apt download libmd0:${Arch3}
apt download libice6:${Arch3}
apt download libsm6:${Arch3}
apt download libuuid1:${Arch3}
apt download libxrandr2:${Arch3}
apt download libxext6:${Arch3}
apt download libxrender1:${Arch3}
apt download libxi6:${Arch3}
apt download libsm6:${Arch3}
apt download libxcursor1:${Arch3}
apt download libxfixes3:${Arch3}
apt download libpng16-16:${Arch3} || true
apt download libpng16-16t64:${Arch3} || true
apt download libicu66:${Arch3} || true
apt download libicu70:${Arch3} || true
apt download libicu74:${Arch3} || true
apt download libfontconfig1:${Arch3} || true apt download libfontconfig1:${Arch3} || true
apt download libfontconfig:${Arch3} || true apt download libfontconfig:${Arch3} || true
mkdir ../output_folder mkdir ../output_folder
@@ -97,12 +62,6 @@ rm -rf deb_folder output_folder
sudo chmod 0755 "${PackagePath}/AppDir/opt/v2rayN/v2rayN" sudo chmod 0755 "${PackagePath}/AppDir/opt/v2rayN/v2rayN"
sudo chmod 0755 "${PackagePath}/AppDir/AppRun" sudo chmod 0755 "${PackagePath}/AppDir/AppRun"
sudo apt install -y patchelf
pushd "${PackagePath}/AppDir/opt/v2rayN"
patchelf --set-interpreter ${Interpreter} v2rayN
popd
# desktop && PATH # desktop && PATH
wget "https://github.com/AppImage/appimagetool/releases/download/continuous/appimagetool-x86_64.AppImage" wget "https://github.com/AppImage/appimagetool/releases/download/continuous/appimagetool-x86_64.AppImage"

View File

@@ -1,7 +1,7 @@
<Project> <Project>
<PropertyGroup> <PropertyGroup>
<Version>7.9.0</Version> <Version>7.9.3</Version>
</PropertyGroup> </PropertyGroup>
<PropertyGroup> <PropertyGroup>
@@ -25,6 +25,9 @@
<MetadataUpdaterSupport>false</MetadataUpdaterSupport> <MetadataUpdaterSupport>false</MetadataUpdaterSupport>
<EnableUnsafeBinaryFormatterSerialization>false</EnableUnsafeBinaryFormatterSerialization> <EnableUnsafeBinaryFormatterSerialization>false</EnableUnsafeBinaryFormatterSerialization>
<EnableUnsafeUTF7Encoding>false</EnableUnsafeUTF7Encoding> <EnableUnsafeUTF7Encoding>false</EnableUnsafeUTF7Encoding>
<UseSystemResourceKeys>true</UseSystemResourceKeys> <UseSystemResourceKeys>true</UseSystemResourceKeys>
<PublishSingleFile>true</PublishSingleFile>
<PublishReadyToRun>false</PublishReadyToRun>
</PropertyGroup> </PropertyGroup>
</Project> </Project>

View File

@@ -507,6 +507,13 @@ namespace ServiceLib
{ ECoreType.v2rayN, "2dust/v2rayN" }, { ECoreType.v2rayN, "2dust/v2rayN" },
}; };
public static readonly List<string> OtherGeoUrls =
[
@"https://raw.githubusercontent.com/Loyalsoldier/geoip/release/geoip-only-cn-private.dat",
@"https://raw.githubusercontent.com/Loyalsoldier/geoip/release/Country.mmdb",
@"https://github.com/MetaCubeX/meta-rules-dat/releases/download/latest/geoip.metadb"
];
#endregion const #endregion const
} }
} }

View File

@@ -294,7 +294,7 @@ namespace ServiceLib.Handler
/// <param name="config"></param> /// <param name="config"></param>
/// <param name="indexes"></param> /// <param name="indexes"></param>
/// <returns></returns> /// <returns></returns>
public static async Task<int> RemoveServer(Config config, List<ProfileItem> indexes) public static async Task<int> RemoveServers(Config config, List<ProfileItem> indexes)
{ {
var subid = "TempRemoveSubId"; var subid = "TempRemoveSubId";
foreach (var item in indexes) foreach (var item in indexes)
@@ -303,7 +303,7 @@ namespace ServiceLib.Handler
} }
await SQLiteHelper.Instance.UpdateAllAsync(indexes); await SQLiteHelper.Instance.UpdateAllAsync(indexes);
await RemoveServerViaSubid(config, subid, false); await RemoveServersViaSubid(config, subid, false);
return 0; return 0;
} }
@@ -886,7 +886,7 @@ namespace ServiceLib.Handler
lstRemove.Add(item); lstRemove.Add(item);
} }
} }
await RemoveServer(config, lstRemove); await RemoveServers(config, lstRemove);
return new Tuple<int, int>(lstProfile.Count, lstKeep.Count); return new Tuple<int, int>(lstProfile.Count, lstKeep.Count);
} }
@@ -1062,12 +1062,9 @@ namespace ServiceLib.Handler
var lstProfile = (from t in lstModel var lstProfile = (from t in lstModel
join t2 in lstProfileExs on t.IndexId equals t2.IndexId join t2 in lstProfileExs on t.IndexId equals t2.IndexId
where t2.Delay == -1 where t2.Delay == -1
select t.IndexId).ToList(); select t).ToList();
foreach (var item in lstProfile) await RemoveServers(config, JsonUtils.Deserialize<List<ProfileItem>>(JsonUtils.Serialize(lstProfile)));
{
await RemoveProfileItem(config, item);
}
return lstProfile.Count; return lstProfile.Count;
} }
@@ -1094,7 +1091,7 @@ namespace ServiceLib.Handler
//remove sub items //remove sub items
if (isSub && Utils.IsNotEmpty(subid)) if (isSub && Utils.IsNotEmpty(subid))
{ {
await RemoveServerViaSubid(config, subid, isSub); await RemoveServersViaSubid(config, subid, isSub);
subFilter = (await AppHandler.Instance.GetSubItem(subid))?.Filter ?? ""; subFilter = (await AppHandler.Instance.GetSubItem(subid))?.Filter ?? "";
} }
@@ -1188,7 +1185,7 @@ namespace ServiceLib.Handler
{ {
if (isSub && Utils.IsNotEmpty(subid)) if (isSub && Utils.IsNotEmpty(subid))
{ {
await RemoveServerViaSubid(config, subid, isSub); await RemoveServersViaSubid(config, subid, isSub);
} }
int count = 0; int count = 0;
foreach (var it in lstProfiles) foreach (var it in lstProfiles)
@@ -1244,7 +1241,7 @@ namespace ServiceLib.Handler
if (isSub && Utils.IsNotEmpty(subid)) if (isSub && Utils.IsNotEmpty(subid))
{ {
await RemoveServerViaSubid(config, subid, isSub); await RemoveServersViaSubid(config, subid, isSub);
} }
profileItem.Subid = subid; profileItem.Subid = subid;
@@ -1269,7 +1266,7 @@ namespace ServiceLib.Handler
if (isSub && Utils.IsNotEmpty(subid)) if (isSub && Utils.IsNotEmpty(subid))
{ {
await RemoveServerViaSubid(config, subid, isSub); await RemoveServersViaSubid(config, subid, isSub);
} }
var lstSsServer = ShadowsocksFmt.ResolveSip008(strData); var lstSsServer = ShadowsocksFmt.ResolveSip008(strData);
@@ -1456,7 +1453,7 @@ namespace ServiceLib.Handler
/// <param name="config"></param> /// <param name="config"></param>
/// <param name="subid"></param> /// <param name="subid"></param>
/// <returns></returns> /// <returns></returns>
public static async Task<int> RemoveServerViaSubid(Config config, string subid, bool isSub) public static async Task<int> RemoveServersViaSubid(Config config, string subid, bool isSub)
{ {
if (Utils.IsNullOrEmpty(subid)) if (Utils.IsNullOrEmpty(subid))
{ {
@@ -1487,7 +1484,7 @@ namespace ServiceLib.Handler
return 0; return 0;
} }
await SQLiteHelper.Instance.DeleteAsync(item); await SQLiteHelper.Instance.DeleteAsync(item);
await RemoveServerViaSubid(config, id, false); await RemoveServersViaSubid(config, id, false);
return 0; return 0;
} }

View File

@@ -2879,7 +2879,7 @@ namespace ServiceLib.Resx {
} }
/// <summary> /// <summary>
/// 查找类似 Install the font to the system and restart the settings 的本地化字符串。 /// 查找类似 Install the font to the system, select or fill in the font name, restart the settings 的本地化字符串。
/// </summary> /// </summary>
public static string TbSettingsCurrentFontFamilyLinuxTip { public static string TbSettingsCurrentFontFamilyLinuxTip {
get { get {

View File

@@ -1334,7 +1334,7 @@
<value>Please do not use the insecure HTTP protocol subscription address</value> <value>Please do not use the insecure HTTP protocol subscription address</value>
</data> </data>
<data name="TbSettingsCurrentFontFamilyLinuxTip" xml:space="preserve"> <data name="TbSettingsCurrentFontFamilyLinuxTip" xml:space="preserve">
<value>Install the font to the system and restart the settings</value> <value>Install the font to the system, select or fill in the font name, restart the settings</value>
</data> </data>
<data name="menuExitTips" xml:space="preserve"> <data name="menuExitTips" xml:space="preserve">
<value>Are you sure to exit?</value> <value>Are you sure to exit?</value>

View File

@@ -1331,7 +1331,7 @@
<value>请不要使用不安全的HTTP协议订阅地址</value> <value>请不要使用不安全的HTTP协议订阅地址</value>
</data> </data>
<data name="TbSettingsCurrentFontFamilyLinuxTip" xml:space="preserve"> <data name="TbSettingsCurrentFontFamilyLinuxTip" xml:space="preserve">
<value>安装字体到系统中,重启设置</value> <value>安装字体到系统中,选择或填入字体名称,重启设置</value>
</data> </data>
<data name="menuExitTips" xml:space="preserve"> <data name="menuExitTips" xml:space="preserve">
<value>是否确定退出?</value> <value>是否确定退出?</value>

View File

@@ -1212,7 +1212,7 @@
<value>請不要使用不安全的HTTP協定訂閱位址</value> <value>請不要使用不安全的HTTP協定訂閱位址</value>
</data> </data>
<data name="TbSettingsCurrentFontFamilyLinuxTip" xml:space="preserve"> <data name="TbSettingsCurrentFontFamilyLinuxTip" xml:space="preserve">
<value>安裝字到系統中,重新啟動設定</value> <value>安裝字到系統中,選擇或填入字體名稱,重新啟動設定</value>
</data> </data>
<data name="menuExitTips" xml:space="preserve"> <data name="menuExitTips" xml:space="preserve">
<value>是否確定退出?</value> <value>是否確定退出?</value>

View File

@@ -1324,7 +1324,7 @@ namespace ServiceLib.Services.CoreConfig
singboxConfig.experimental.cache_file = new CacheFile4Sbox() singboxConfig.experimental.cache_file = new CacheFile4Sbox()
{ {
enabled = true, enabled = true,
path = Utils.GetBinConfigPath("cache.db") path = Utils.GetBinPath("cache.db")
}; };
} }

View File

@@ -261,10 +261,17 @@ namespace ServiceLib.Services
if (pid > 0) if (pid > 0)
{ {
await Task.Delay(500); await Task.Delay(500);
await DoRealPing(downloadHandle, it); var delay = await DoRealPing(downloadHandle, it);
if (blSpeedTest) if (blSpeedTest)
{ {
await DoSpeedTest(downloadHandle, it); if (delay > 0)
{
await DoSpeedTest(downloadHandle, it);
}
else
{
UpdateFunc(it.IndexId, "", ResUI.SpeedtestingSkip);
}
} }
} }
else else
@@ -289,13 +296,14 @@ namespace ServiceLib.Services
Task.WaitAll(tasks.ToArray()); Task.WaitAll(tasks.ToArray());
} }
private async Task DoRealPing(DownloadService downloadHandle, ServerTestItem it) private async Task<int> DoRealPing(DownloadService downloadHandle, ServerTestItem it)
{ {
var webProxy = new WebProxy($"socks5://{Global.Loopback}:{it.Port}"); var webProxy = new WebProxy($"socks5://{Global.Loopback}:{it.Port}");
var responseTime = await downloadHandle.GetRealPingTime(_config.SpeedTestItem.SpeedPingTestUrl, webProxy, 10); var responseTime = await downloadHandle.GetRealPingTime(_config.SpeedTestItem.SpeedPingTestUrl, webProxy, 10);
ProfileExHandler.Instance.SetTestDelay(it.IndexId, responseTime); ProfileExHandler.Instance.SetTestDelay(it.IndexId, responseTime);
UpdateFunc(it.IndexId, responseTime.ToString()); UpdateFunc(it.IndexId, responseTime.ToString());
return responseTime;
} }
private async Task DoSpeedTest(DownloadService downloadHandle, ServerTestItem it) private async Task DoSpeedTest(DownloadService downloadHandle, ServerTestItem it)

View File

@@ -237,8 +237,8 @@ namespace ServiceLib.Services
public async Task UpdateGeoFileAll(Config config, Action<bool, string> updateFunc) public async Task UpdateGeoFileAll(Config config, Action<bool, string> updateFunc)
{ {
await UpdateGeoFile("geosite", config, updateFunc); await UpdateGeoFiles(config, updateFunc);
await UpdateGeoFile("geoip", config, updateFunc); await UpdateOtherFiles(config, updateFunc);
await UpdateSrsFileAll(config, updateFunc); await UpdateSrsFileAll(config, updateFunc);
_updateFunc?.Invoke(true, string.Format(ResUI.MsgDownloadGeoFileSuccessfully, "geo")); _updateFunc?.Invoke(true, string.Format(ResUI.MsgDownloadGeoFileSuccessfully, "geo"));
} }
@@ -427,22 +427,32 @@ namespace ServiceLib.Services
{ {
if (Utils.IsWindows()) if (Utils.IsWindows())
{ {
//Check for standalone windows .Net version var url = RuntimeInformation.ProcessArchitecture switch
if (coreInfo?.CoreType == ECoreType.v2rayN && RuntimeInformation.ProcessArchitecture == Architecture.X64)
{
var runtimes = await Utils.GetCliWrapOutput("dotnet", "--list-runtimes");
if (runtimes == null || runtimes.Contains("Microsoft.WindowsDesktop.App 8") == false)
{
return coreInfo?.DownloadUrlWin64?.Replace(".zip", "-SelfContained.zip");
}
}
return RuntimeInformation.ProcessArchitecture switch
{ {
Architecture.Arm64 => coreInfo?.DownloadUrlWinArm64, Architecture.Arm64 => coreInfo?.DownloadUrlWinArm64,
Architecture.X64 => coreInfo?.DownloadUrlWin64, Architecture.X64 => coreInfo?.DownloadUrlWin64,
_ => null, _ => null,
}; };
if (coreInfo?.CoreType != ECoreType.v2rayN)
{
return url;
}
//Check for standalone windows .Net version
if (File.Exists(Path.Combine(Utils.GetBaseDirectory(), "wpfgfx_cor3.dll"))
&& File.Exists(Path.Combine(Utils.GetBaseDirectory(), "D3DCompiler_47_cor3.dll")))
{
return url?.Replace(".zip", "-SelfContained.zip");
}
//Check for avalonia desktop windows version
if (File.Exists(Path.Combine(Utils.GetBaseDirectory(), "libHarfBuzzSharp.dll")))
{
return url?.Replace(".zip", "-desktop.zip");
}
return url;
} }
else if (Utils.IsLinux()) else if (Utils.IsLinux())
{ {
@@ -462,14 +472,14 @@ namespace ServiceLib.Services
_ => null, _ => null,
}; };
} }
return null; return await Task.FromResult("");
} }
#endregion CheckUpdate private #endregion CheckUpdate private
#region Geo private #region Geo private
private async Task UpdateGeoFile(string geoName, Config config, Action<bool, string> updateFunc) private async Task UpdateGeoFiles(Config config, Action<bool, string> updateFunc)
{ {
_updateFunc = updateFunc; _updateFunc = updateFunc;
@@ -477,11 +487,28 @@ namespace ServiceLib.Services
? Global.GeoUrl ? Global.GeoUrl
: config.ConstItem.GeoSourceUrl; : config.ConstItem.GeoSourceUrl;
var fileName = $"{geoName}.dat"; List<string> files = ["geosite", "geoip"];
var targetPath = Utils.GetBinPath($"{fileName}"); foreach (var geoName in files)
var url = string.Format(geoUrl, geoName); {
var fileName = $"{geoName}.dat";
var targetPath = Utils.GetBinPath($"{fileName}");
var url = string.Format(geoUrl, geoName);
await DownloadGeoFile(url, fileName, targetPath, updateFunc); await DownloadGeoFile(url, fileName, targetPath, updateFunc);
}
}
private async Task UpdateOtherFiles(Config config, Action<bool, string> updateFunc)
{
_updateFunc = updateFunc;
foreach (var url in Global.OtherGeoUrls)
{
var fileName = Path.GetFileName(url);
var targetPath = Utils.GetBinPath($"{fileName}");
await DownloadGeoFile(url, fileName, targetPath, updateFunc);
}
} }
private async Task UpdateSrsFileAll(Config config, Action<bool, string> updateFunc) private async Task UpdateSrsFileAll(Config config, Action<bool, string> updateFunc)

View File

@@ -520,7 +520,7 @@ namespace ServiceLib.ViewModels
} }
var exists = lstSelecteds.Exists(t => t.IndexId == _config.IndexId); var exists = lstSelecteds.Exists(t => t.IndexId == _config.IndexId);
await ConfigHandler.RemoveServer(_config, lstSelecteds); await ConfigHandler.RemoveServers(_config, lstSelecteds);
NoticeHandler.Instance.Enqueue(ResUI.OperationSuccess); NoticeHandler.Instance.Enqueue(ResUI.OperationSuccess);
if (lstSelecteds.Count == _profileItems.Count) if (lstSelecteds.Count == _profileItems.Count)
{ {

View File

@@ -60,6 +60,9 @@ namespace ServiceLib.ViewModels
[Reactive] [Reactive]
public int SystemProxySelected { get; set; } public int SystemProxySelected { get; set; }
[Reactive]
public bool BlSystemProxyPacVisible { get; set; }
#endregion System Proxy #endregion System Proxy
#region UI #region UI
@@ -96,6 +99,7 @@ namespace ServiceLib.ViewModels
SelectedRouting = new(); SelectedRouting = new();
SelectedServer = new(); SelectedServer = new();
RunningServerToolTipText = "-"; RunningServerToolTipText = "-";
BlSystemProxyPacVisible = Utils.IsWindows();
if (_config.TunModeItem.EnableTun && AllowEnableTun()) if (_config.TunModeItem.EnableTun && AllowEnableTun())
{ {

View File

@@ -19,6 +19,7 @@
<ResourceDictionary> <ResourceDictionary>
<ResourceDictionary.MergedDictionaries> <ResourceDictionary.MergedDictionaries>
<ResourceInclude Source="Assets/GlobalResources.axaml" /> <ResourceInclude Source="Assets/GlobalResources.axaml" />
<ResourceInclude Source="Controls/AutoCompleteBox.axaml" />
</ResourceDictionary.MergedDictionaries> </ResourceDictionary.MergedDictionaries>
</ResourceDictionary> </ResourceDictionary>
</Application.Resources> </Application.Resources>
@@ -46,6 +47,12 @@
Header="{x:Static resx:ResUI.menuSystemProxyNothing}" Header="{x:Static resx:ResUI.menuSystemProxyNothing}"
IsChecked="{Binding BlSystemProxyNothing}" IsChecked="{Binding BlSystemProxyNothing}"
ToggleType="Radio" /> ToggleType="Radio" />
<NativeMenuItem
Command="{Binding SystemProxyPacCmd}"
Header="{x:Static resx:ResUI.menuSystemProxyPac}"
IsChecked="{Binding BlSystemProxyPac}"
IsVisible="{Binding BlSystemProxyPacVisible}"
ToggleType="Radio" />
<NativeMenuItemSeparator /> <NativeMenuItemSeparator />
<NativeMenuItem Click="MenuAddServerViaClipboardClick" Header="{x:Static resx:ResUI.menuAddServerViaClipboard}" /> <NativeMenuItem Click="MenuAddServerViaClipboardClick" Header="{x:Static resx:ResUI.menuAddServerViaClipboard}" />
<NativeMenuItem Header="{x:Static resx:ResUI.menuAddServerViaScan}" IsVisible="False" /> <NativeMenuItem Header="{x:Static resx:ResUI.menuAddServerViaScan}" IsVisible="False" />
@@ -61,4 +68,4 @@
</TrayIcon> </TrayIcon>
</TrayIcons> </TrayIcons>
</TrayIcon.Icons> </TrayIcon.Icons>
</Application> </Application>

View File

@@ -8,4 +8,13 @@
<StreamGeometry x:Key="building_refresh">M849.652671 679.144788l111.007233-174.965917-50.615794 0C905.498584 274.107915 717.720873 88.965218 486.575446 88.965218c-233.998405 0-423.716304 189.698456-423.716304 423.707095 0 233.998405 189.716876 423.715281 423.716304 423.715281 113.936959 0 217.278605-45.079708 293.440216-118.235868l-62.46568-108.306728c-55.750745 65.205071-138.455375 106.709347-230.974535 106.709347-167.843706 0-303.882032-136.039349-303.882032-303.883055S318.732763 208.788234 486.575446 208.788234c164.951843 0 298.899554 131.522476 303.44508 295.389614l-51.357691 0L849.652671 679.144788z</StreamGeometry> <StreamGeometry x:Key="building_refresh">M849.652671 679.144788l111.007233-174.965917-50.615794 0C905.498584 274.107915 717.720873 88.965218 486.575446 88.965218c-233.998405 0-423.716304 189.698456-423.716304 423.707095 0 233.998405 189.716876 423.715281 423.716304 423.715281 113.936959 0 217.278605-45.079708 293.440216-118.235868l-62.46568-108.306728c-55.750745 65.205071-138.455375 106.709347-230.974535 106.709347-167.843706 0-303.882032-136.039349-303.882032-303.883055S318.732763 208.788234 486.575446 208.788234c164.951843 0 298.899554 131.522476 303.44508 295.389614l-51.357691 0L849.652671 679.144788z</StreamGeometry>
<StreamGeometry x:Key="building_ping">M273.28 899.328c-6.4 6.4-16 9.6-25.6 9.6-6.4 0-12.8-3.2-18.56-6.4-102.4-85.76-162.56-209.92-162.56-343.68 0-245.12 200.32-445.44 445.44-445.44s445.44 200.32 445.44 445.44c0 133.76-56.96 257.92-162.56 343.68-12.16 12.8-34.56 9.6-44.16-3.2-12.8-12.8-9.6-35.2 3.2-44.8a377.152 377.152 0 0 0 136.96-292.48c0-209.92-172.16-382.08-382.08-382.08-206.72-3.2-378.88 168.96-378.88 378.88 0 114.56 51.2 222.72 140.16 295.68 12.8 12.8 16 32 3.2 44.8z m394.88-540.8c12.8-12.8 31.36-12.8 44.16 0 12.8 12.8 12.8 32 0 44.8l-138.88 138.88c1.28 5.12 2.56 10.88 2.56 16.64 0 35.2-28.8 64-64 64-5.76 0-11.52-1.28-16.64-2.56l-24.32 24.32c-6.4 6.4-12.8 9.6-22.4 9.6-9.6 0-16-3.2-22.4-9.6-12.8-12.8-12.8-31.36 0-44.16l24.32-24.96a69.76 69.76 0 0 1-1.92-16.64c0-35.2 28.16-63.36 63.36-63.36 5.76 0 11.52 0.64 16.64 1.92z</StreamGeometry> <StreamGeometry x:Key="building_ping">M273.28 899.328c-6.4 6.4-16 9.6-25.6 9.6-6.4 0-12.8-3.2-18.56-6.4-102.4-85.76-162.56-209.92-162.56-343.68 0-245.12 200.32-445.44 445.44-445.44s445.44 200.32 445.44 445.44c0 133.76-56.96 257.92-162.56 343.68-12.16 12.8-34.56 9.6-44.16-3.2-12.8-12.8-9.6-35.2 3.2-44.8a377.152 377.152 0 0 0 136.96-292.48c0-209.92-172.16-382.08-382.08-382.08-206.72-3.2-378.88 168.96-378.88 378.88 0 114.56 51.2 222.72 140.16 295.68 12.8 12.8 16 32 3.2 44.8z m394.88-540.8c12.8-12.8 31.36-12.8 44.16 0 12.8 12.8 12.8 32 0 44.8l-138.88 138.88c1.28 5.12 2.56 10.88 2.56 16.64 0 35.2-28.8 64-64 64-5.76 0-11.52-1.28-16.64-2.56l-24.32 24.32c-6.4 6.4-12.8 9.6-22.4 9.6-9.6 0-16-3.2-22.4-9.6-12.8-12.8-12.8-31.36 0-44.16l24.32-24.96a69.76 69.76 0 0 1-1.92-16.64c0-35.2 28.16-63.36 63.36-63.36 5.76 0 11.52 0.64 16.64 1.92z</StreamGeometry>
<x:Double x:Key="IconButtonWidth">32</x:Double>
<x:Double x:Key="IconButtonHeight">32</x:Double>
<Thickness x:Key="Margin2">2</Thickness>
<Thickness x:Key="MarginLr4">4,0</Thickness>
<Thickness x:Key="Margin4">4</Thickness>
<Thickness x:Key="MarginLr8">8,0</Thickness>
<Thickness x:Key="MarginTb8">0,8</Thickness>
<Thickness x:Key="Margin8">8</Thickness>
</ResourceDictionary> </ResourceDictionary>

View File

@@ -5,19 +5,12 @@
</Border> </Border>
</Design.PreviewWith> </Design.PreviewWith>
<Style Selector="TextBlock.Margin8"> <Style Selector="DataGrid">
<Setter Property="Margin" Value="8" /> <Setter Property="RowHeight" Value="24" />
</Style> </Style>
<Style Selector="StackPanel.Margin8">
<Setter Property="Margin" Value="8" /> <Style Selector="PathIcon">
<Setter Property="Width" Value="16" />
<Setter Property="Height" Value="16" />
</Style> </Style>
<Style Selector="DockPanel.Margin8"> </Styles>
<Setter Property="Margin" Value="8" />
</Style>
<Style Selector="WrapPanel.Margin8">
<Setter Property="Margin" Value="8" />
</Style>
<Style Selector="Grid.Margin8">
<Setter Property="Margin" Value="8" />
</Style>
</Styles>

View File

@@ -1,4 +1,4 @@
using Avalonia; using Avalonia;
using Avalonia.Media; using Avalonia.Media;
namespace v2rayN.Desktop.Common namespace v2rayN.Desktop.Common
@@ -10,9 +10,9 @@ namespace v2rayN.Desktop.Common
var uri = Path.Combine(Global.AvaAssets, "Fonts#Noto Sans SC"); var uri = Path.Combine(Global.AvaAssets, "Fonts#Noto Sans SC");
return appBuilder.With(new FontManagerOptions() return appBuilder.With(new FontManagerOptions()
{ {
DefaultFamilyName = uri, //DefaultFamilyName = uri,
FontFallbacks = new[] { new FontFallback { FontFamily = new FontFamily(uri) } } FontFallbacks = new[] { new FontFallback { FontFamily = new FontFamily(uri) } }
}); });
} }
} }
} }

View File

@@ -0,0 +1,48 @@
<ResourceDictionary
xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:controls="clr-namespace:v2rayN.Desktop.Controls">
<!-- Add Resources Here -->
<ControlTheme x:Key="{x:Type controls:AutoCompleteBox}" TargetType="controls:AutoCompleteBox">
<Setter Property="VerticalAlignment" Value="Center" />
<Setter Property="MinHeight" Value="{DynamicResource AutoCompleteBoxDefaultHeight}" />
<Setter Property="MaxDropDownHeight" Value="{DynamicResource AutoCompleteMaxDropdownHeight}" />
<Setter Property="Template">
<ControlTemplate TargetType="AutoCompleteBox">
<Panel>
<TextBox
Name="PART_TextBox"
MinHeight="{TemplateBinding MinHeight}"
VerticalAlignment="Stretch"
DataValidationErrors.Errors="{TemplateBinding (DataValidationErrors.Errors)}"
InnerLeftContent="{TemplateBinding InnerLeftContent}"
InnerRightContent="{TemplateBinding InnerRightContent}"
Watermark="{TemplateBinding Watermark}" />
<Popup
Name="PART_Popup"
MaxHeight="{TemplateBinding MaxDropDownHeight}"
IsLightDismissEnabled="True"
PlacementTarget="{TemplateBinding}">
<Border
MinWidth="{Binding Bounds.Width, RelativeSource={RelativeSource TemplatedParent}}"
Margin="{DynamicResource AutoCompleteBoxPopupMargin}"
Padding="{DynamicResource AutoCompleteBoxPopupPadding}"
HorizontalAlignment="Stretch"
Background="{DynamicResource AutoCompleteBoxPopupBackground}"
BorderBrush="{DynamicResource AutoCompleteBoxPopupBorderBrush}"
BorderThickness="{DynamicResource AutoCompleteBoxPopupBorderThickness}"
BoxShadow="{DynamicResource AutoCompleteBoxPopupBoxShadow}"
CornerRadius="{DynamicResource AutoCompleteBoxPopupCornerRadius}">
<ListBox
Name="PART_SelectingItemsControl"
Foreground="{TemplateBinding Foreground}"
ItemTemplate="{TemplateBinding ItemTemplate}"
ScrollViewer.HorizontalScrollBarVisibility="Auto"
ScrollViewer.VerticalScrollBarVisibility="Auto" />
</Border>
</Popup>
</Panel>
</ControlTemplate>
</Setter>
</ControlTheme>
</ResourceDictionary>

View File

@@ -0,0 +1,38 @@
using Avalonia.Input;
using Avalonia.Interactivity;
namespace v2rayN.Desktop.Controls;
public class AutoCompleteBox : Avalonia.Controls.AutoCompleteBox
{
static AutoCompleteBox()
{
MinimumPrefixLengthProperty.OverrideDefaultValue<AutoCompleteBox>(0);
}
public AutoCompleteBox()
{
AddHandler(PointerPressedEvent, OnBoxPointerPressed, RoutingStrategies.Tunnel);
}
private void OnBoxPointerPressed(object? sender, PointerPressedEventArgs e)
{
if (Equals(sender, this) && e.GetCurrentPoint(this).Properties.IsLeftButtonPressed)
{
SetCurrentValue(IsDropDownOpenProperty, true);
}
}
protected override void OnGotFocus(GotFocusEventArgs e)
{
base.OnGotFocus(e);
if (IsDropDownOpen)
return;
SetCurrentValue(IsDropDownOpenProperty, true);
}
public void Clear()
{
SetCurrentValue(SelectedItemProperty, null);
}
}

View File

@@ -119,6 +119,17 @@ namespace v2rayN.Desktop.ViewModels
Value = size, Value = size,
}); });
Application.Current?.Styles.Add(style); Application.Current?.Styles.Add(style);
ModifyFontSizeEx(size);
}
private void ModifyFontSizeEx(double size)
{
//DataGrid
var rowHeight = 20 + (size / 2);
var style = new Style(x => x.OfType<DataGrid>());
style.Add(new Setter(DataGrid.RowHeightProperty, rowHeight));
Application.Current?.Styles.Add(style);
} }
private void ModifyFontFamily() private void ModifyFontFamily()

View File

@@ -1,4 +1,4 @@
<Window <Window
x:Class="v2rayN.Desktop.Views.AddServer2Window" x:Class="v2rayN.Desktop.Views.AddServer2Window"
xmlns="https://github.com/avaloniaui" xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
@@ -13,10 +13,10 @@
ShowInTaskbar="False" ShowInTaskbar="False"
WindowStartupLocation="CenterScreen" WindowStartupLocation="CenterScreen"
mc:Ignorable="d"> mc:Ignorable="d">
<DockPanel Classes="Margin8"> <DockPanel Margin="{StaticResource Margin8}">
<StackPanel <StackPanel
HorizontalAlignment="Center" HorizontalAlignment="Center"
Classes="Margin8" Margin="{StaticResource Margin4}"
DockPanel.Dock="Bottom" DockPanel.Dock="Bottom"
Orientation="Horizontal"> Orientation="Horizontal">
<Button <Button
@@ -28,7 +28,7 @@
<Button <Button
x:Name="btnCancel" x:Name="btnCancel"
Width="100" Width="100"
Margin="8,0" Margin="{StaticResource MarginLr8}"
Content="{x:Static resx:ResUI.TbCancel}" Content="{x:Static resx:ResUI.TbCancel}"
Cursor="Hand" Cursor="Hand"
IsCancel="True" /> IsCancel="True" />
@@ -39,14 +39,14 @@
<TextBlock <TextBlock
Grid.Row="0" Grid.Row="0"
Grid.Column="0" Grid.Column="0"
Classes="Margin8" Margin="{StaticResource Margin4}"
Text="{x:Static resx:ResUI.menuServers}" /> Text="{x:Static resx:ResUI.menuServers}" />
<TextBlock <TextBlock
Grid.Row="1" Grid.Row="1"
Grid.Column="0" Grid.Column="0"
VerticalAlignment="Center" VerticalAlignment="Center"
Classes="Margin8" Margin="{StaticResource Margin4}"
Text="{x:Static resx:ResUI.TbRemarks}" /> Text="{x:Static resx:ResUI.TbRemarks}" />
<TextBox <TextBox
@@ -56,13 +56,13 @@
Width="400" Width="400"
HorizontalAlignment="Left" HorizontalAlignment="Left"
VerticalAlignment="Center" VerticalAlignment="Center"
Classes="Margin8" /> Margin="{StaticResource Margin4}" />
<TextBlock <TextBlock
Grid.Row="2" Grid.Row="2"
Grid.Column="0" Grid.Column="0"
VerticalAlignment="Center" VerticalAlignment="Center"
Classes="Margin8" Margin="{StaticResource Margin4}"
Text="{x:Static resx:ResUI.TbAddress}" /> Text="{x:Static resx:ResUI.TbAddress}" />
<TextBox <TextBox
x:Name="txtAddress" x:Name="txtAddress"
@@ -71,7 +71,7 @@
Width="400" Width="400"
HorizontalAlignment="Left" HorizontalAlignment="Left"
VerticalAlignment="Center" VerticalAlignment="Center"
Classes="Margin8" Margin="{StaticResource Margin4}"
IsReadOnly="True" /> IsReadOnly="True" />
<StackPanel <StackPanel
Grid.Row="2" Grid.Row="2"
@@ -80,11 +80,11 @@
Orientation="Horizontal"> Orientation="Horizontal">
<Button <Button
x:Name="btnBrowse" x:Name="btnBrowse"
Margin="2,0" Margin="{StaticResource MarginLr4}"
Content="{x:Static resx:ResUI.TbBrowse}" /> Content="{x:Static resx:ResUI.TbBrowse}" />
<Button <Button
x:Name="btnEdit" x:Name="btnEdit"
Margin="2,0" Margin="{StaticResource MarginLr4}"
Content="{x:Static resx:ResUI.TbEdit}" /> Content="{x:Static resx:ResUI.TbEdit}" />
</StackPanel> </StackPanel>
@@ -92,7 +92,7 @@
Grid.Row="3" Grid.Row="3"
Grid.Column="0" Grid.Column="0"
VerticalAlignment="Center" VerticalAlignment="Center"
Classes="Margin8" Margin="{StaticResource Margin4}"
Text="{x:Static resx:ResUI.TbCoreType}" /> Text="{x:Static resx:ResUI.TbCoreType}" />
<ComboBox <ComboBox
x:Name="cmbCoreType" x:Name="cmbCoreType"
@@ -100,27 +100,27 @@
Grid.Column="1" Grid.Column="1"
Width="200" Width="200"
HorizontalAlignment="Left" HorizontalAlignment="Left"
Classes="Margin8" Margin="{StaticResource Margin4}"
MaxDropDownHeight="1000" /> MaxDropDownHeight="1000" />
<TextBlock <TextBlock
Grid.Row="4" Grid.Row="4"
Grid.Column="0" Grid.Column="0"
VerticalAlignment="Center" VerticalAlignment="Center"
Classes="Margin8" Margin="{StaticResource Margin4}"
Text="{x:Static resx:ResUI.TbDisplayLog}" /> Text="{x:Static resx:ResUI.TbDisplayLog}" />
<StackPanel <StackPanel
Grid.Row="4" Grid.Row="4"
Grid.Column="1" Grid.Column="1"
Classes="Margin8" Margin="{StaticResource Margin4}"
Orientation="Horizontal"> Orientation="Horizontal">
<ToggleSwitch <ToggleSwitch
x:Name="togDisplayLog" x:Name="togDisplayLog"
HorizontalAlignment="Left" HorizontalAlignment="Left"
Classes="Margin8" /> Margin="{StaticResource Margin4}" />
<TextBlock <TextBlock
Margin="8,0"
VerticalAlignment="Center" VerticalAlignment="Center"
Margin="{StaticResource MarginLr8}"
Text="{x:Static resx:ResUI.TipDisplayLog}" /> Text="{x:Static resx:ResUI.TipDisplayLog}" />
</StackPanel> </StackPanel>
@@ -128,7 +128,7 @@
Grid.Row="5" Grid.Row="5"
Grid.Column="0" Grid.Column="0"
VerticalAlignment="Center" VerticalAlignment="Center"
Classes="Margin8" Margin="{StaticResource Margin4}"
Text="{x:Static resx:ResUI.TbPreSocksPort}" /> Text="{x:Static resx:ResUI.TbPreSocksPort}" />
<TextBox <TextBox
x:Name="txtPreSocksPort" x:Name="txtPreSocksPort"
@@ -136,12 +136,12 @@
Grid.Column="1" Grid.Column="1"
Width="200" Width="200"
HorizontalAlignment="Left" HorizontalAlignment="Left"
Classes="Margin8" /> Margin="{StaticResource Margin4}" />
<StackPanel <StackPanel
Grid.Row="6" Grid.Row="6"
Grid.Column="1" Grid.Column="1"
Grid.ColumnSpan="2" Grid.ColumnSpan="2"
Classes="Margin8"> Margin="{StaticResource Margin4}">
<TextBlock <TextBlock
Width="500" Width="500"
VerticalAlignment="Center" VerticalAlignment="Center"
@@ -149,12 +149,12 @@
TextWrapping="Wrap" /> TextWrapping="Wrap" />
<TextBlock <TextBlock
Width="500" Width="500"
Margin="8,0"
VerticalAlignment="Center" VerticalAlignment="Center"
Margin="{StaticResource MarginLr8}"
Text="{x:Static resx:ResUI.CustomServerTips}" Text="{x:Static resx:ResUI.CustomServerTips}"
TextWrapping="Wrap" /> TextWrapping="Wrap" />
</StackPanel> </StackPanel>
</Grid> </Grid>
</ScrollViewer> </ScrollViewer>
</DockPanel> </DockPanel>
</Window> </Window>

View File

@@ -1,4 +1,4 @@
<Window <Window
x:Class="v2rayN.Desktop.Views.AddServerWindow" x:Class="v2rayN.Desktop.Views.AddServerWindow"
xmlns="https://github.com/avaloniaui" xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
@@ -13,10 +13,10 @@
ShowInTaskbar="False" ShowInTaskbar="False"
WindowStartupLocation="CenterScreen" WindowStartupLocation="CenterScreen"
mc:Ignorable="d"> mc:Ignorable="d">
<DockPanel Classes="Margin8"> <DockPanel Margin="{StaticResource Margin8}">
<StackPanel <StackPanel
Margin="{StaticResource Margin4}"
HorizontalAlignment="Center" HorizontalAlignment="Center"
Classes="Margin8"
DockPanel.Dock="Bottom" DockPanel.Dock="Bottom"
Orientation="Horizontal"> Orientation="Horizontal">
<Button <Button
@@ -28,7 +28,7 @@
<Button <Button
x:Name="btnCancel" x:Name="btnCancel"
Width="100" Width="100"
Margin="8,0" Margin="{StaticResource MarginLr8}"
Content="{x:Static resx:ResUI.TbCancel}" Content="{x:Static resx:ResUI.TbCancel}"
Cursor="Hand" Cursor="Hand"
IsCancel="True" /> IsCancel="True" />
@@ -44,7 +44,7 @@
<TextBlock <TextBlock
Grid.Row="0" Grid.Row="0"
Grid.Column="0" Grid.Column="0"
Classes="Margin8" Margin="{StaticResource Margin4}"
Text="{x:Static resx:ResUI.menuServers}" /> Text="{x:Static resx:ResUI.menuServers}" />
<StackPanel <StackPanel
Grid.Row="0" Grid.Row="0"
@@ -53,52 +53,52 @@
<ComboBox <ComboBox
x:Name="cmbCoreType" x:Name="cmbCoreType"
Width="100" Width="100"
Classes="Margin8" Margin="{StaticResource Margin4}"
ToolTip.Tip="{x:Static resx:ResUI.TbCoreType}" /> ToolTip.Tip="{x:Static resx:ResUI.TbCoreType}" />
</StackPanel> </StackPanel>
<TextBlock <TextBlock
Grid.Row="1" Grid.Row="1"
Grid.Column="0" Grid.Column="0"
Margin="{StaticResource Margin4}"
VerticalAlignment="Center" VerticalAlignment="Center"
Classes="Margin8"
Text="{x:Static resx:ResUI.TbRemarks}" /> Text="{x:Static resx:ResUI.TbRemarks}" />
<TextBox <TextBox
x:Name="txtRemarks" x:Name="txtRemarks"
Grid.Row="1" Grid.Row="1"
Grid.Column="1" Grid.Column="1"
Width="400" Width="400"
Classes="Margin8" /> Margin="{StaticResource Margin4}" />
<TextBlock <TextBlock
Grid.Row="2" Grid.Row="2"
Grid.Column="0" Grid.Column="0"
Margin="{StaticResource Margin4}"
VerticalAlignment="Center" VerticalAlignment="Center"
Classes="Margin8"
Text="{x:Static resx:ResUI.TbAddress}" /> Text="{x:Static resx:ResUI.TbAddress}" />
<TextBox <TextBox
x:Name="txtAddress" x:Name="txtAddress"
Grid.Row="2" Grid.Row="2"
Grid.Column="1" Grid.Column="1"
Width="400" Width="400"
Classes="Margin8" /> Margin="{StaticResource Margin4}" />
<TextBlock <TextBlock
Grid.Row="3" Grid.Row="3"
Grid.Column="0" Grid.Column="0"
Margin="{StaticResource Margin4}"
VerticalAlignment="Center" VerticalAlignment="Center"
Classes="Margin8"
Text="{x:Static resx:ResUI.TbPort}" /> Text="{x:Static resx:ResUI.TbPort}" />
<TextBox <TextBox
x:Name="txtPort" x:Name="txtPort"
Grid.Row="3" Grid.Row="3"
Grid.Column="1" Grid.Column="1"
Width="200" Width="200"
HorizontalAlignment="Left" Margin="{StaticResource Margin4}"
Classes="Margin8" /> HorizontalAlignment="Left" />
</Grid> </Grid>
<Separator Grid.Row="1" Margin="0,10" /> <Separator Grid.Row="1" Margin="{StaticResource MarginTb8}" />
<Grid <Grid
x:Name="gridVMess" x:Name="gridVMess"
@@ -110,48 +110,48 @@
<TextBlock <TextBlock
Grid.Row="1" Grid.Row="1"
Grid.Column="0" Grid.Column="0"
Margin="{StaticResource Margin4}"
VerticalAlignment="Center" VerticalAlignment="Center"
Classes="Margin8"
Text="{x:Static resx:ResUI.TbId}" /> Text="{x:Static resx:ResUI.TbId}" />
<TextBox <TextBox
x:Name="txtId" x:Name="txtId"
Grid.Row="1" Grid.Row="1"
Grid.Column="1" Grid.Column="1"
Width="400" Width="400"
Classes="Margin8" /> Margin="{StaticResource Margin4}" />
<Button <Button
x:Name="btnGUID" x:Name="btnGUID"
Grid.Row="1" Grid.Row="1"
Grid.Column="2" Grid.Column="2"
Margin="4,0" Margin="{StaticResource MarginLr4}"
Content="{x:Static resx:ResUI.TbGUID}" /> Content="{x:Static resx:ResUI.TbGUID}" />
<TextBlock <TextBlock
Grid.Row="2" Grid.Row="2"
Grid.Column="0" Grid.Column="0"
Margin="{StaticResource Margin4}"
VerticalAlignment="Center" VerticalAlignment="Center"
Classes="Margin8"
Text="{x:Static resx:ResUI.TbAlterId}" /> Text="{x:Static resx:ResUI.TbAlterId}" />
<TextBox <TextBox
x:Name="txtAlterId" x:Name="txtAlterId"
Grid.Row="2" Grid.Row="2"
Grid.Column="1" Grid.Column="1"
Width="200" Width="200"
HorizontalAlignment="Left" Margin="{StaticResource Margin4}"
Classes="Margin8" /> HorizontalAlignment="Left" />
<TextBlock <TextBlock
Grid.Row="3" Grid.Row="3"
Grid.Column="0" Grid.Column="0"
Margin="{StaticResource Margin4}"
VerticalAlignment="Center" VerticalAlignment="Center"
Classes="Margin8"
Text="{x:Static resx:ResUI.TbSecurity}" /> Text="{x:Static resx:ResUI.TbSecurity}" />
<ComboBox <ComboBox
x:Name="cmbSecurity" x:Name="cmbSecurity"
Grid.Row="3" Grid.Row="3"
Grid.Column="1" Grid.Column="1"
Width="200" Width="200"
Classes="Margin8" /> Margin="{StaticResource Margin4}" />
</Grid> </Grid>
<Grid <Grid
x:Name="gridSs" x:Name="gridSs"
@@ -163,28 +163,28 @@
<TextBlock <TextBlock
Grid.Row="1" Grid.Row="1"
Grid.Column="0" Grid.Column="0"
Margin="{StaticResource Margin4}"
VerticalAlignment="Center" VerticalAlignment="Center"
Classes="Margin8"
Text="{x:Static resx:ResUI.TbId3}" /> Text="{x:Static resx:ResUI.TbId3}" />
<TextBox <TextBox
x:Name="txtId3" x:Name="txtId3"
Grid.Row="1" Grid.Row="1"
Grid.Column="1" Grid.Column="1"
Width="400" Width="400"
Classes="Margin8" /> Margin="{StaticResource Margin4}" />
<TextBlock <TextBlock
Grid.Row="2" Grid.Row="2"
Grid.Column="0" Grid.Column="0"
Margin="{StaticResource Margin4}"
VerticalAlignment="Center" VerticalAlignment="Center"
Classes="Margin8"
Text="{x:Static resx:ResUI.TbSecurity3}" /> Text="{x:Static resx:ResUI.TbSecurity3}" />
<ComboBox <ComboBox
x:Name="cmbSecurity3" x:Name="cmbSecurity3"
Grid.Row="2" Grid.Row="2"
Grid.Column="1" Grid.Column="1"
Width="300" Width="300"
Classes="Margin8" /> Margin="{StaticResource Margin4}" />
</Grid> </Grid>
<Grid <Grid
x:Name="gridSocks" x:Name="gridSocks"
@@ -196,28 +196,28 @@
<TextBlock <TextBlock
Grid.Row="1" Grid.Row="1"
Grid.Column="0" Grid.Column="0"
Margin="{StaticResource Margin4}"
VerticalAlignment="Center" VerticalAlignment="Center"
Classes="Margin8"
Text="{x:Static resx:ResUI.TbSecurity4}" /> Text="{x:Static resx:ResUI.TbSecurity4}" />
<TextBox <TextBox
x:Name="txtSecurity4" x:Name="txtSecurity4"
Grid.Row="1" Grid.Row="1"
Grid.Column="1" Grid.Column="1"
Width="400" Width="400"
Classes="Margin8" /> Margin="{StaticResource Margin4}" />
<TextBlock <TextBlock
Grid.Row="2" Grid.Row="2"
Grid.Column="0" Grid.Column="0"
Margin="{StaticResource Margin4}"
VerticalAlignment="Center" VerticalAlignment="Center"
Classes="Margin8"
Text="{x:Static resx:ResUI.TbId4}" /> Text="{x:Static resx:ResUI.TbId4}" />
<TextBox <TextBox
x:Name="txtId4" x:Name="txtId4"
Grid.Row="2" Grid.Row="2"
Grid.Column="1" Grid.Column="1"
Width="400" Width="400"
Classes="Margin8" /> Margin="{StaticResource Margin4}" />
</Grid> </Grid>
<Grid <Grid
x:Name="gridVLESS" x:Name="gridVLESS"
@@ -229,48 +229,48 @@
<TextBlock <TextBlock
Grid.Row="1" Grid.Row="1"
Grid.Column="0" Grid.Column="0"
Margin="{StaticResource Margin4}"
VerticalAlignment="Center" VerticalAlignment="Center"
Classes="Margin8"
Text="{x:Static resx:ResUI.TbId5}" /> Text="{x:Static resx:ResUI.TbId5}" />
<TextBox <TextBox
x:Name="txtId5" x:Name="txtId5"
Grid.Row="1" Grid.Row="1"
Grid.Column="1" Grid.Column="1"
Width="400" Width="400"
Classes="Margin8" /> Margin="{StaticResource Margin4}" />
<Button <Button
x:Name="btnGUID5" x:Name="btnGUID5"
Grid.Row="1" Grid.Row="1"
Grid.Column="2" Grid.Column="2"
Margin="4,0" Margin="{StaticResource MarginLr4}"
Content="{x:Static resx:ResUI.TbGUID}" /> Content="{x:Static resx:ResUI.TbGUID}" />
<TextBlock <TextBlock
Grid.Row="2" Grid.Row="2"
Grid.Column="0" Grid.Column="0"
Margin="{StaticResource Margin4}"
VerticalAlignment="Center" VerticalAlignment="Center"
Classes="Margin8"
Text="{x:Static resx:ResUI.TbFlow5}" /> Text="{x:Static resx:ResUI.TbFlow5}" />
<ComboBox <ComboBox
x:Name="cmbFlow5" x:Name="cmbFlow5"
Grid.Row="2" Grid.Row="2"
Grid.Column="1" Grid.Column="1"
Width="200" Width="200"
Classes="Margin8" /> Margin="{StaticResource Margin4}" />
<TextBlock <TextBlock
Grid.Row="3" Grid.Row="3"
Grid.Column="0" Grid.Column="0"
Margin="{StaticResource Margin4}"
VerticalAlignment="Center" VerticalAlignment="Center"
Classes="Margin8"
Text="{x:Static resx:ResUI.TbSecurity5}" /> Text="{x:Static resx:ResUI.TbSecurity5}" />
<TextBox <TextBox
x:Name="txtSecurity5" x:Name="txtSecurity5"
Grid.Row="3" Grid.Row="3"
Grid.Column="1" Grid.Column="1"
Width="200" Width="200"
HorizontalAlignment="Left" Margin="{StaticResource Margin4}"
Classes="Margin8" /> HorizontalAlignment="Left" />
</Grid> </Grid>
<Grid <Grid
x:Name="gridTrojan" x:Name="gridTrojan"
@@ -282,28 +282,28 @@
<TextBlock <TextBlock
Grid.Row="1" Grid.Row="1"
Grid.Column="0" Grid.Column="0"
Margin="{StaticResource Margin4}"
VerticalAlignment="Center" VerticalAlignment="Center"
Classes="Margin8"
Text="{x:Static resx:ResUI.TbId3}" /> Text="{x:Static resx:ResUI.TbId3}" />
<TextBox <TextBox
x:Name="txtId6" x:Name="txtId6"
Grid.Row="1" Grid.Row="1"
Grid.Column="1" Grid.Column="1"
Width="400" Width="400"
Classes="Margin8" /> Margin="{StaticResource Margin4}" />
<TextBlock <TextBlock
Grid.Row="2" Grid.Row="2"
Grid.Column="0" Grid.Column="0"
Margin="{StaticResource Margin4}"
VerticalAlignment="Center" VerticalAlignment="Center"
Classes="Margin8"
Text="{x:Static resx:ResUI.TbFlow5}" /> Text="{x:Static resx:ResUI.TbFlow5}" />
<ComboBox <ComboBox
x:Name="cmbFlow6" x:Name="cmbFlow6"
Grid.Row="2" Grid.Row="2"
Grid.Column="1" Grid.Column="1"
Width="200" Width="200"
Classes="Margin8" /> Margin="{StaticResource Margin4}" />
</Grid> </Grid>
<Grid <Grid
x:Name="gridHysteria2" x:Name="gridHysteria2"
@@ -315,28 +315,28 @@
<TextBlock <TextBlock
Grid.Row="1" Grid.Row="1"
Grid.Column="0" Grid.Column="0"
Margin="{StaticResource Margin4}"
VerticalAlignment="Center" VerticalAlignment="Center"
Classes="Margin8"
Text="{x:Static resx:ResUI.TbId3}" /> Text="{x:Static resx:ResUI.TbId3}" />
<TextBox <TextBox
x:Name="txtId7" x:Name="txtId7"
Grid.Row="1" Grid.Row="1"
Grid.Column="1" Grid.Column="1"
Width="400" Width="400"
Classes="Margin8" /> Margin="{StaticResource Margin4}" />
<TextBlock <TextBlock
Grid.Row="2" Grid.Row="2"
Grid.Column="0" Grid.Column="0"
Margin="{StaticResource Margin4}"
VerticalAlignment="Center" VerticalAlignment="Center"
Classes="Margin8"
Text="{x:Static resx:ResUI.TbPath7}" /> Text="{x:Static resx:ResUI.TbPath7}" />
<TextBox <TextBox
x:Name="txtPath7" x:Name="txtPath7"
Grid.Row="2" Grid.Row="2"
Grid.Column="1" Grid.Column="1"
Width="400" Width="400"
Classes="Margin8" /> Margin="{StaticResource Margin4}" />
</Grid> </Grid>
<Grid <Grid
x:Name="gridTuic" x:Name="gridTuic"
@@ -348,41 +348,41 @@
<TextBlock <TextBlock
Grid.Row="1" Grid.Row="1"
Grid.Column="0" Grid.Column="0"
Margin="{StaticResource Margin4}"
VerticalAlignment="Center" VerticalAlignment="Center"
Classes="Margin8"
Text="{x:Static resx:ResUI.TbId}" /> Text="{x:Static resx:ResUI.TbId}" />
<TextBox <TextBox
x:Name="txtId8" x:Name="txtId8"
Grid.Row="1" Grid.Row="1"
Grid.Column="1" Grid.Column="1"
Width="400" Width="400"
Classes="Margin8" /> Margin="{StaticResource Margin4}" />
<TextBlock <TextBlock
Grid.Row="2" Grid.Row="2"
Grid.Column="0" Grid.Column="0"
Margin="{StaticResource Margin4}"
VerticalAlignment="Center" VerticalAlignment="Center"
Classes="Margin8"
Text="{x:Static resx:ResUI.TbId3}" /> Text="{x:Static resx:ResUI.TbId3}" />
<TextBox <TextBox
x:Name="txtSecurity8" x:Name="txtSecurity8"
Grid.Row="2" Grid.Row="2"
Grid.Column="1" Grid.Column="1"
Width="400" Width="400"
Classes="Margin8" /> Margin="{StaticResource Margin4}" />
<TextBlock <TextBlock
Grid.Row="3" Grid.Row="3"
Grid.Column="0" Grid.Column="0"
Margin="{StaticResource Margin4}"
VerticalAlignment="Center" VerticalAlignment="Center"
Classes="Margin8"
Text="{x:Static resx:ResUI.TbHeaderType8}" /> Text="{x:Static resx:ResUI.TbHeaderType8}" />
<ComboBox <ComboBox
x:Name="cmbHeaderType8" x:Name="cmbHeaderType8"
Grid.Row="3" Grid.Row="3"
Grid.Column="1" Grid.Column="1"
Width="200" Width="200"
Classes="Margin8" /> Margin="{StaticResource Margin4}" />
</Grid> </Grid>
<Grid <Grid
x:Name="gridWireguard" x:Name="gridWireguard"
@@ -394,75 +394,75 @@
<TextBlock <TextBlock
Grid.Row="1" Grid.Row="1"
Grid.Column="0" Grid.Column="0"
Margin="{StaticResource Margin4}"
VerticalAlignment="Center" VerticalAlignment="Center"
Classes="Margin8"
Text="{x:Static resx:ResUI.TbPrivateKey}" /> Text="{x:Static resx:ResUI.TbPrivateKey}" />
<TextBox <TextBox
x:Name="txtId9" x:Name="txtId9"
Grid.Row="1" Grid.Row="1"
Grid.Column="1" Grid.Column="1"
Width="400" Width="400"
Classes="Margin8" /> Margin="{StaticResource Margin4}" />
<TextBlock <TextBlock
Grid.Row="2" Grid.Row="2"
Grid.Column="0" Grid.Column="0"
Margin="{StaticResource Margin4}"
VerticalAlignment="Center" VerticalAlignment="Center"
Classes="Margin8"
Text="{x:Static resx:ResUI.TbPublicKey}" /> Text="{x:Static resx:ResUI.TbPublicKey}" />
<TextBox <TextBox
x:Name="txtPublicKey9" x:Name="txtPublicKey9"
Grid.Row="2" Grid.Row="2"
Grid.Column="1" Grid.Column="1"
Width="400" Width="400"
HorizontalAlignment="Left" Margin="{StaticResource Margin4}"
Classes="Margin8" /> HorizontalAlignment="Left" />
<TextBlock <TextBlock
Grid.Row="3" Grid.Row="3"
Grid.Column="0" Grid.Column="0"
Margin="{StaticResource Margin4}"
VerticalAlignment="Center" VerticalAlignment="Center"
Classes="Margin8"
Text="{x:Static resx:ResUI.TbReserved}" /> Text="{x:Static resx:ResUI.TbReserved}" />
<TextBox <TextBox
x:Name="txtPath9" x:Name="txtPath9"
Grid.Row="3" Grid.Row="3"
Grid.Column="1" Grid.Column="1"
Width="400" Width="400"
Classes="Margin8" /> Margin="{StaticResource Margin4}" />
<TextBlock <TextBlock
Grid.Row="4" Grid.Row="4"
Grid.Column="0" Grid.Column="0"
Margin="{StaticResource Margin4}"
VerticalAlignment="Center" VerticalAlignment="Center"
Classes="Margin8"
Text="{x:Static resx:ResUI.TbLocalAddress}" /> Text="{x:Static resx:ResUI.TbLocalAddress}" />
<TextBox <TextBox
x:Name="txtRequestHost9" x:Name="txtRequestHost9"
Grid.Row="4" Grid.Row="4"
Grid.Column="1" Grid.Column="1"
Width="400" Width="400"
Classes="Margin8" /> Margin="{StaticResource Margin4}" />
<TextBlock <TextBlock
Grid.Row="5" Grid.Row="5"
Grid.Column="0" Grid.Column="0"
Margin="{StaticResource Margin4}"
VerticalAlignment="Center" VerticalAlignment="Center"
Classes="Margin8"
Text="Mtu" /> Text="Mtu" />
<TextBox <TextBox
x:Name="txtShortId9" x:Name="txtShortId9"
Grid.Row="5" Grid.Row="5"
Grid.Column="1" Grid.Column="1"
Width="200" Width="200"
HorizontalAlignment="Left" Margin="{StaticResource Margin4}"
Classes="Margin8" /> HorizontalAlignment="Left" />
</Grid> </Grid>
<Separator <Separator
x:Name="sepa2" x:Name="sepa2"
Grid.Row="3" Grid.Row="3"
Margin="0,10" /> Margin="{StaticResource MarginTb8}" />
<Grid <Grid
x:Name="gridTransport" x:Name="gridTransport"
@@ -473,34 +473,34 @@
<TextBlock <TextBlock
Grid.Row="0" Grid.Row="0"
Grid.ColumnSpan="2" Grid.ColumnSpan="2"
Classes="Margin8" Margin="{StaticResource Margin4}"
Text="{x:Static resx:ResUI.GbTransport}" /> Text="{x:Static resx:ResUI.GbTransport}" />
<TextBlock <TextBlock
Grid.Row="1" Grid.Row="1"
Grid.Column="0" Grid.Column="0"
Margin="{StaticResource Margin4}"
VerticalAlignment="Center" VerticalAlignment="Center"
Classes="Margin8"
Text="{x:Static resx:ResUI.TbNetwork}" /> Text="{x:Static resx:ResUI.TbNetwork}" />
<ComboBox <ComboBox
x:Name="cmbNetwork" x:Name="cmbNetwork"
Grid.Row="1" Grid.Row="1"
Grid.Column="1" Grid.Column="1"
Width="200" Width="200"
Classes="Margin8" /> Margin="{StaticResource Margin4}" />
<TextBlock <TextBlock
Grid.Row="1" Grid.Row="1"
Grid.Column="2" Grid.Column="2"
Margin="{StaticResource Margin4}"
VerticalAlignment="Center" VerticalAlignment="Center"
Classes="Margin8"
Text="{x:Static resx:ResUI.TipNetwork}" /> Text="{x:Static resx:ResUI.TipNetwork}" />
<TextBlock <TextBlock
x:Name="labHeaderType" x:Name="labHeaderType"
Grid.Row="2" Grid.Row="2"
Grid.Column="0" Grid.Column="0"
Margin="{StaticResource Margin4}"
VerticalAlignment="Center" VerticalAlignment="Center"
Classes="Margin8"
Text="{x:Static resx:ResUI.TbHeaderType}" /> Text="{x:Static resx:ResUI.TbHeaderType}" />
<StackPanel <StackPanel
Grid.Row="2" Grid.Row="2"
@@ -510,35 +510,32 @@
<ComboBox <ComboBox
x:Name="cmbHeaderType" x:Name="cmbHeaderType"
Width="200" Width="200"
Classes="Margin8" /> Margin="{StaticResource Margin4}" />
<Button <Button
x:Name="btnExtra" x:Name="btnExtra"
Width="30" Width="{StaticResource IconButtonWidth}"
Height="30" Height="{StaticResource IconButtonHeight}"
Margin="10,0" Margin="{StaticResource MarginLr8}"
Theme="{DynamicResource BorderlessButton}"> Theme="{DynamicResource BorderlessButton}">
<Button.Content> <Button.Content>
<PathIcon <PathIcon Data="{StaticResource building_more}" Foreground="{DynamicResource ButtonDefaultTertiaryForeground}" />
Width="20"
Height="20"
Data="{StaticResource building_more}"
Foreground="{DynamicResource ButtonDefaultTertiaryForeground}" />
</Button.Content> </Button.Content>
<Button.Flyout> <Button.Flyout>
<Flyout> <Flyout>
<StackPanel> <StackPanel>
<TextBlock <TextBlock
Margin="{StaticResource Margin4}"
VerticalAlignment="Center" VerticalAlignment="Center"
Classes="Margin8"
Text="{x:Static resx:ResUI.TransportExtraTip}" /> Text="{x:Static resx:ResUI.TransportExtraTip}" />
<TextBox <TextBox
x:Name="txtExtra" x:Name="txtExtra"
Width="400" Width="400"
MinHeight="100" MinHeight="100"
Margin="{StaticResource Margin4}"
HorizontalAlignment="Stretch" HorizontalAlignment="Stretch"
VerticalAlignment="Center" VerticalAlignment="Center"
Classes="TextArea Margin8" Classes="TextArea"
MinLines="6" MinLines="6"
TextWrapping="Wrap" /> TextWrapping="Wrap" />
</StackPanel> </StackPanel>
@@ -550,52 +547,52 @@
x:Name="tipHeaderType" x:Name="tipHeaderType"
Grid.Row="2" Grid.Row="2"
Grid.Column="2" Grid.Column="2"
Margin="{StaticResource Margin4}"
VerticalAlignment="Center" VerticalAlignment="Center"
Classes="Margin8"
Text="{x:Static resx:ResUI.TbHeaderType}" /> Text="{x:Static resx:ResUI.TbHeaderType}" />
<TextBlock <TextBlock
Grid.Row="3" Grid.Row="3"
Grid.Column="0" Grid.Column="0"
Margin="{StaticResource Margin4}"
VerticalAlignment="Center" VerticalAlignment="Center"
Classes="Margin8"
Text="{x:Static resx:ResUI.TbRequestHost}" /> Text="{x:Static resx:ResUI.TbRequestHost}" />
<TextBox <TextBox
x:Name="txtRequestHost" x:Name="txtRequestHost"
Grid.Row="3" Grid.Row="3"
Grid.Column="1" Grid.Column="1"
Width="400" Width="400"
Classes="Margin8" /> Margin="{StaticResource Margin4}" />
<TextBlock <TextBlock
x:Name="tipRequestHost" x:Name="tipRequestHost"
Grid.Row="3" Grid.Row="3"
Grid.Column="2" Grid.Column="2"
Margin="{StaticResource Margin4}"
VerticalAlignment="Center" VerticalAlignment="Center"
Classes="Margin8"
Text="{x:Static resx:ResUI.TbRequestHost}" /> Text="{x:Static resx:ResUI.TbRequestHost}" />
<TextBlock <TextBlock
Grid.Row="4" Grid.Row="4"
Grid.Column="0" Grid.Column="0"
Margin="{StaticResource Margin4}"
VerticalAlignment="Center" VerticalAlignment="Center"
Classes="Margin8"
Text="{x:Static resx:ResUI.TbPath}" /> Text="{x:Static resx:ResUI.TbPath}" />
<TextBox <TextBox
x:Name="txtPath" x:Name="txtPath"
Grid.Row="4" Grid.Row="4"
Grid.Column="1" Grid.Column="1"
Width="400" Width="400"
Classes="Margin8" /> Margin="{StaticResource Margin4}" />
<TextBlock <TextBlock
x:Name="tipPath" x:Name="tipPath"
Grid.Row="4" Grid.Row="4"
Grid.Column="2" Grid.Column="2"
Margin="{StaticResource Margin4}"
VerticalAlignment="Center" VerticalAlignment="Center"
Classes="Margin8"
Text="{x:Static resx:ResUI.TbPath}" /> Text="{x:Static resx:ResUI.TbPath}" />
</Grid> </Grid>
<Separator Grid.Row="5" Margin="0,10" /> <Separator Grid.Row="5" Margin="{StaticResource MarginTb8}" />
<Grid <Grid
x:Name="gridTls" x:Name="gridTls"
@@ -606,15 +603,15 @@
<TextBlock <TextBlock
Grid.Row="0" Grid.Row="0"
Grid.Column="0" Grid.Column="0"
Margin="{StaticResource Margin4}"
VerticalAlignment="Center" VerticalAlignment="Center"
Classes="Margin8"
Text="{x:Static resx:ResUI.TbStreamSecurity}" /> Text="{x:Static resx:ResUI.TbStreamSecurity}" />
<ComboBox <ComboBox
x:Name="cmbStreamSecurity" x:Name="cmbStreamSecurity"
Grid.Row="0" Grid.Row="0"
Grid.Column="1" Grid.Column="1"
Width="200" Width="200"
Classes="Margin8" /> Margin="{StaticResource Margin4}" />
</Grid> </Grid>
<Grid <Grid
x:Name="gridTlsMore" x:Name="gridTlsMore"
@@ -626,55 +623,55 @@
<TextBlock <TextBlock
Grid.Row="1" Grid.Row="1"
Grid.Column="0" Grid.Column="0"
Margin="{StaticResource Margin4}"
VerticalAlignment="Center" VerticalAlignment="Center"
Classes="Margin8"
Text="{x:Static resx:ResUI.TbSNI}" /> Text="{x:Static resx:ResUI.TbSNI}" />
<TextBox <TextBox
x:Name="txtSNI" x:Name="txtSNI"
Grid.Row="1" Grid.Row="1"
Grid.Column="1" Grid.Column="1"
Width="400" Width="400"
HorizontalAlignment="Left" Margin="{StaticResource Margin4}"
Classes="Margin8" /> HorizontalAlignment="Left" />
<TextBlock <TextBlock
Grid.Row="2" Grid.Row="2"
Grid.Column="0" Grid.Column="0"
Margin="{StaticResource Margin4}"
VerticalAlignment="Center" VerticalAlignment="Center"
Classes="Margin8"
Text="{x:Static resx:ResUI.TbFingerprint}" /> Text="{x:Static resx:ResUI.TbFingerprint}" />
<ComboBox <ComboBox
x:Name="cmbFingerprint" x:Name="cmbFingerprint"
Grid.Row="2" Grid.Row="2"
Grid.Column="1" Grid.Column="1"
Width="200" Width="200"
Classes="Margin8" /> Margin="{StaticResource Margin4}" />
<TextBlock <TextBlock
Grid.Row="3" Grid.Row="3"
Grid.Column="0" Grid.Column="0"
Margin="{StaticResource Margin4}"
VerticalAlignment="Center" VerticalAlignment="Center"
Classes="Margin8"
Text="{x:Static resx:ResUI.TbAlpn}" /> Text="{x:Static resx:ResUI.TbAlpn}" />
<ComboBox <ComboBox
x:Name="cmbAlpn" x:Name="cmbAlpn"
Grid.Row="3" Grid.Row="3"
Grid.Column="1" Grid.Column="1"
Width="200" Width="200"
Classes="Margin8" /> Margin="{StaticResource Margin4}" />
<TextBlock <TextBlock
Grid.Row="4" Grid.Row="4"
Grid.Column="0" Grid.Column="0"
Margin="{StaticResource Margin4}"
VerticalAlignment="Center" VerticalAlignment="Center"
Classes="Margin8"
Text="{x:Static resx:ResUI.TbAllowInsecure}" /> Text="{x:Static resx:ResUI.TbAllowInsecure}" />
<ComboBox <ComboBox
x:Name="cmbAllowInsecure" x:Name="cmbAllowInsecure"
Grid.Row="4" Grid.Row="4"
Grid.Column="1" Grid.Column="1"
Width="200" Width="200"
Classes="Margin8" /> Margin="{StaticResource Margin4}" />
</Grid> </Grid>
<Grid <Grid
x:Name="gridRealityMore" x:Name="gridRealityMore"
@@ -686,74 +683,74 @@
<TextBlock <TextBlock
Grid.Row="0" Grid.Row="0"
Grid.Column="0" Grid.Column="0"
Margin="{StaticResource Margin4}"
VerticalAlignment="Center" VerticalAlignment="Center"
Classes="Margin8"
Text="{x:Static resx:ResUI.TbSNI}" /> Text="{x:Static resx:ResUI.TbSNI}" />
<TextBox <TextBox
x:Name="txtSNI2" x:Name="txtSNI2"
Grid.Row="0" Grid.Row="0"
Grid.Column="1" Grid.Column="1"
Width="400" Width="400"
HorizontalAlignment="Left" Margin="{StaticResource Margin4}"
Classes="Margin8" /> HorizontalAlignment="Left" />
<TextBlock <TextBlock
Grid.Row="1" Grid.Row="1"
Grid.Column="0" Grid.Column="0"
Margin="{StaticResource Margin4}"
VerticalAlignment="Center" VerticalAlignment="Center"
Classes="Margin8"
Text="{x:Static resx:ResUI.TbFingerprint}" /> Text="{x:Static resx:ResUI.TbFingerprint}" />
<ComboBox <ComboBox
x:Name="cmbFingerprint2" x:Name="cmbFingerprint2"
Grid.Row="1" Grid.Row="1"
Grid.Column="1" Grid.Column="1"
Width="200" Width="200"
Classes="Margin8" /> Margin="{StaticResource Margin4}" />
<TextBlock <TextBlock
Grid.Row="2" Grid.Row="2"
Grid.Column="0" Grid.Column="0"
Margin="{StaticResource Margin4}"
VerticalAlignment="Center" VerticalAlignment="Center"
Classes="Margin8"
Text="{x:Static resx:ResUI.TbPublicKey}" /> Text="{x:Static resx:ResUI.TbPublicKey}" />
<TextBox <TextBox
x:Name="txtPublicKey" x:Name="txtPublicKey"
Grid.Row="2" Grid.Row="2"
Grid.Column="1" Grid.Column="1"
Width="400" Width="400"
HorizontalAlignment="Left" Margin="{StaticResource Margin4}"
Classes="Margin8" /> HorizontalAlignment="Left" />
<TextBlock <TextBlock
Grid.Row="3" Grid.Row="3"
Grid.Column="0" Grid.Column="0"
Margin="{StaticResource Margin4}"
VerticalAlignment="Center" VerticalAlignment="Center"
Classes="Margin8"
Text="{x:Static resx:ResUI.TbShortId}" /> Text="{x:Static resx:ResUI.TbShortId}" />
<TextBox <TextBox
x:Name="txtShortId" x:Name="txtShortId"
Grid.Row="3" Grid.Row="3"
Grid.Column="1" Grid.Column="1"
Width="200" Width="200"
HorizontalAlignment="Left" Margin="{StaticResource Margin4}"
Classes="Margin8" /> HorizontalAlignment="Left" />
<TextBlock <TextBlock
Grid.Row="4" Grid.Row="4"
Grid.Column="0" Grid.Column="0"
Margin="{StaticResource Margin4}"
VerticalAlignment="Center" VerticalAlignment="Center"
Classes="Margin8"
Text="{x:Static resx:ResUI.TbSpiderX}" /> Text="{x:Static resx:ResUI.TbSpiderX}" />
<TextBox <TextBox
x:Name="txtSpiderX" x:Name="txtSpiderX"
Grid.Row="4" Grid.Row="4"
Grid.Column="1" Grid.Column="1"
Width="400" Width="400"
HorizontalAlignment="Left" Margin="{StaticResource Margin4}"
Classes="Margin8" /> HorizontalAlignment="Left" />
</Grid> </Grid>
<Separator Grid.Row="8" Margin="0,10" /> <Separator Grid.Row="8" Margin="{StaticResource MarginTb8}" />
</Grid> </Grid>
</ScrollViewer> </ScrollViewer>
</DockPanel> </DockPanel>
</Window> </Window>

View File

@@ -1,4 +1,4 @@
<UserControl <UserControl
x:Class="v2rayN.Desktop.Views.BackupAndRestoreView" x:Class="v2rayN.Desktop.Views.BackupAndRestoreView"
xmlns="https://github.com/avaloniaui" xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
@@ -14,90 +14,87 @@
</Style> </Style>
</UserControl.Styles> </UserControl.Styles>
<DockPanel Classes="Margin8"> <DockPanel Margin="{StaticResource Margin8}">
<StackPanel Classes="Margin8" DockPanel.Dock="Bottom"> <StackPanel Margin="{StaticResource Margin4}" DockPanel.Dock="Bottom">
<TextBlock <TextBlock
Name="txtMsg" Name="txtMsg"
HorizontalAlignment="Left" HorizontalAlignment="Left"
Classes="Margin8" /> Margin="{StaticResource Margin4}" />
</StackPanel> </StackPanel>
<StackPanel> <StackPanel>
<Border <Border
Margin="4" Margin="{StaticResource Margin4}"
VerticalAlignment="Center" VerticalAlignment="Center"
Theme="{DynamicResource CardBorder}"> Theme="{DynamicResource CardBorder}">
<Grid <Grid
Classes="Margin8" Margin="{StaticResource Margin4}"
ColumnDefinitions="300,200" ColumnDefinitions="300,200"
RowDefinitions="Auto,Auto,Auto,Auto"> RowDefinitions="Auto,Auto,Auto,Auto">
<TextBlock <TextBlock
Grid.Row="0" Grid.Row="0"
Grid.Column="0" Grid.Column="0"
Classes="Margin8" Margin="{StaticResource Margin4}"
Text="{x:Static resx:ResUI.menuLocalBackupAndRestore}" /> Text="{x:Static resx:ResUI.menuLocalBackupAndRestore}" />
<TextBlock <TextBlock
Grid.Row="1" Grid.Row="1"
Grid.Column="0" Grid.Column="0"
VerticalAlignment="Center" VerticalAlignment="Center"
Classes="Margin8" Margin="{StaticResource Margin4}"
Text="{x:Static resx:ResUI.menuLocalBackup}" /> Text="{x:Static resx:ResUI.menuLocalBackup}" />
<Button <Button
Name="menuLocalBackup" Name="menuLocalBackup"
Grid.Row="1" Grid.Row="1"
Grid.Column="1" Grid.Column="1"
VerticalAlignment="Center" VerticalAlignment="Center"
Classes="Margin8" Margin="{StaticResource Margin4}"
Content="{x:Static resx:ResUI.menuLocalBackup}" /> Content="{x:Static resx:ResUI.menuLocalBackup}" />
<Separator <Separator
Grid.Row="2" Grid.Row="2"
Grid.Column="0" Grid.Column="0"
Grid.ColumnSpan="2" /> Grid.ColumnSpan="2"
Margin="{StaticResource MarginTb8}" />
<TextBlock <TextBlock
Grid.Row="3" Grid.Row="3"
Grid.Column="0" Grid.Column="0"
VerticalAlignment="Center" VerticalAlignment="Center"
Classes="Margin8" Margin="{StaticResource Margin4}"
Text="{x:Static resx:ResUI.menuLocalRestore}" /> Text="{x:Static resx:ResUI.menuLocalRestore}" />
<Button <Button
Name="menuLocalRestore" Name="menuLocalRestore"
Grid.Row="3" Grid.Row="3"
Grid.Column="1" Grid.Column="1"
VerticalAlignment="Center" VerticalAlignment="Center"
Classes="Margin8" Margin="{StaticResource Margin4}"
Content="{x:Static resx:ResUI.menuLocalRestore}" /> Content="{x:Static resx:ResUI.menuLocalRestore}" />
</Grid> </Grid>
</Border> </Border>
<Border <Border
Margin="4" Margin="{StaticResource Margin4}"
VerticalAlignment="Center" VerticalAlignment="Center"
Theme="{DynamicResource CardBorder}"> Theme="{DynamicResource CardBorder}">
<Grid <Grid
Classes="Margin8" Margin="{StaticResource Margin4}"
ColumnDefinitions="300,200" ColumnDefinitions="300,200"
RowDefinitions="Auto,Auto,Auto,Auto,Auto"> RowDefinitions="Auto,Auto,Auto,Auto,Auto">
<StackPanel <StackPanel
Grid.Row="0" Grid.Row="0"
Grid.Column="0" Grid.Column="0"
Orientation="Horizontal"> Orientation="Horizontal">
<TextBlock Classes="Margin8" Text="{x:Static resx:ResUI.menuRemoteBackupAndRestore}" /> <TextBlock Margin="{StaticResource Margin4}" Text="{x:Static resx:ResUI.menuRemoteBackupAndRestore}" />
<Button <Button
Width="30" Width="{StaticResource IconButtonWidth}"
Height="30" Height="{StaticResource IconButtonHeight}"
MinWidth="30" MinWidth="{StaticResource IconButtonWidth}"
Margin="10,0" Margin="{StaticResource MarginLr8}"
Theme="{DynamicResource BorderlessButton}"> Theme="{DynamicResource BorderlessButton}">
<Button.Content> <Button.Content>
<PathIcon <PathIcon Data="{StaticResource building_more}" Foreground="{DynamicResource ButtonDefaultTertiaryForeground}" />
Width="20"
Height="20"
Data="{StaticResource building_more}"
Foreground="{DynamicResource ButtonDefaultTertiaryForeground}" />
</Button.Content> </Button.Content>
<Button.Flyout> <Button.Flyout>
<Flyout> <Flyout>
@@ -107,7 +104,7 @@
Grid.Row="0" Grid.Row="0"
Grid.Column="0" Grid.Column="0"
VerticalAlignment="Center" VerticalAlignment="Center"
Classes="Margin8" Margin="{StaticResource Margin4}"
Text="{x:Static resx:ResUI.LvWebDavUrl}" /> Text="{x:Static resx:ResUI.LvWebDavUrl}" />
<TextBox <TextBox
@@ -115,14 +112,14 @@
Grid.Row="0" Grid.Row="0"
Grid.Column="1" Grid.Column="1"
VerticalAlignment="Center" VerticalAlignment="Center"
Classes="Margin8" Margin="{StaticResource Margin4}"
TextWrapping="Wrap" /> TextWrapping="Wrap" />
<TextBlock <TextBlock
Grid.Row="1" Grid.Row="1"
Grid.Column="0" Grid.Column="0"
VerticalAlignment="Center" VerticalAlignment="Center"
Classes="Margin8" Margin="{StaticResource Margin4}"
Text="{x:Static resx:ResUI.LvWebDavUserName}" /> Text="{x:Static resx:ResUI.LvWebDavUserName}" />
<TextBox <TextBox
@@ -130,13 +127,13 @@
Grid.Row="1" Grid.Row="1"
Grid.Column="1" Grid.Column="1"
VerticalAlignment="Center" VerticalAlignment="Center"
Classes="Margin8" /> Margin="{StaticResource Margin4}" />
<TextBlock <TextBlock
Grid.Row="2" Grid.Row="2"
Grid.Column="0" Grid.Column="0"
VerticalAlignment="Center" VerticalAlignment="Center"
Classes="Margin8" Margin="{StaticResource Margin4}"
Text="{x:Static resx:ResUI.LvWebDavPassword}" /> Text="{x:Static resx:ResUI.LvWebDavPassword}" />
<TextBox <TextBox
@@ -144,13 +141,13 @@
Grid.Row="2" Grid.Row="2"
Grid.Column="1" Grid.Column="1"
VerticalAlignment="Center" VerticalAlignment="Center"
Classes="Margin8" /> Margin="{StaticResource Margin4}" />
<TextBlock <TextBlock
Grid.Row="3" Grid.Row="3"
Grid.Column="0" Grid.Column="0"
VerticalAlignment="Center" VerticalAlignment="Center"
Classes="Margin8" Margin="{StaticResource Margin4}"
Text="{x:Static resx:ResUI.LvWebDavDirName}" /> Text="{x:Static resx:ResUI.LvWebDavDirName}" />
<TextBox <TextBox
@@ -158,7 +155,7 @@
Grid.Row="3" Grid.Row="3"
Grid.Column="1" Grid.Column="1"
VerticalAlignment="Center" VerticalAlignment="Center"
Classes="Margin8" /> Margin="{StaticResource Margin4}" />
<Button <Button
x:Name="menuWebDavCheck" x:Name="menuWebDavCheck"
@@ -166,7 +163,7 @@
Grid.Column="1" Grid.Column="1"
HorizontalAlignment="Right" HorizontalAlignment="Right"
VerticalAlignment="Center" VerticalAlignment="Center"
Classes="Margin8" Margin="{StaticResource Margin4}"
Content="{x:Static resx:ResUI.LvWebDavCheck}" /> Content="{x:Static resx:ResUI.LvWebDavCheck}" />
</Grid> </Grid>
</StackPanel> </StackPanel>
@@ -180,35 +177,36 @@
Grid.Row="1" Grid.Row="1"
Grid.Column="0" Grid.Column="0"
VerticalAlignment="Center" VerticalAlignment="Center"
Classes="Margin8" Margin="{StaticResource Margin4}"
Text="{x:Static resx:ResUI.menuRemoteBackup}" /> Text="{x:Static resx:ResUI.menuRemoteBackup}" />
<Button <Button
Name="menuRemoteBackup" Name="menuRemoteBackup"
Grid.Row="1" Grid.Row="1"
Grid.Column="1" Grid.Column="1"
VerticalAlignment="Center" VerticalAlignment="Center"
Classes="Margin8" Margin="{StaticResource Margin4}"
Content="{x:Static resx:ResUI.menuRemoteBackup}" /> Content="{x:Static resx:ResUI.menuRemoteBackup}" />
<Separator <Separator
Grid.Row="2" Grid.Row="2"
Grid.Column="0" Grid.Column="0"
Grid.ColumnSpan="2" /> Grid.ColumnSpan="2"
Margin="{StaticResource MarginTb8}" />
<TextBlock <TextBlock
Grid.Row="3" Grid.Row="3"
Grid.Column="0" Grid.Column="0"
VerticalAlignment="Center" VerticalAlignment="Center"
Classes="Margin8" Margin="{StaticResource Margin4}"
Text="{x:Static resx:ResUI.menuRemoteRestore}" /> Text="{x:Static resx:ResUI.menuRemoteRestore}" />
<Button <Button
Name="menuRemoteRestore" Name="menuRemoteRestore"
Grid.Row="3" Grid.Row="3"
Grid.Column="1" Grid.Column="1"
VerticalAlignment="Center" VerticalAlignment="Center"
Classes="Margin8" Margin="{StaticResource Margin4}"
Content="{x:Static resx:ResUI.menuRemoteRestore}" /> Content="{x:Static resx:ResUI.menuRemoteRestore}" />
</Grid> </Grid>
</Border> </Border>
</StackPanel> </StackPanel>
</DockPanel> </DockPanel>
</UserControl> </UserControl>

View File

@@ -1,4 +1,4 @@
<UserControl <UserControl
x:Class="v2rayN.Desktop.Views.CheckUpdateView" x:Class="v2rayN.Desktop.Views.CheckUpdateView"
xmlns="https://github.com/avaloniaui" xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
@@ -11,40 +11,45 @@
x:DataType="vms:CheckUpdateViewModel" x:DataType="vms:CheckUpdateViewModel"
mc:Ignorable="d"> mc:Ignorable="d">
<DockPanel Classes="Margin8"> <DockPanel Margin="{StaticResource Margin8}">
<StackPanel <Border
HorizontalAlignment="Center" Margin="{StaticResource Margin4}"
Classes="Margin8" VerticalAlignment="Center"
DockPanel.Dock="Bottom" DockPanel.Dock="Bottom"
Orientation="Horizontal"> Theme="{DynamicResource CardBorder}">
<TextBlock <StackPanel
HorizontalAlignment="Left" Margin="{StaticResource Margin4}"
VerticalAlignment="Center" HorizontalAlignment="Center"
Classes="Margin8" Orientation="Horizontal">
Text="{x:Static resx:ResUI.TbSettingsEnableCheckPreReleaseUpdate}" />
<ToggleSwitch
x:Name="togEnableCheckPreReleaseUpdate"
HorizontalAlignment="Left"
Classes="Margin8" />
<Button <TextBlock
x:Name="btnCheckUpdate" Margin="{StaticResource Margin4}"
Width="100" HorizontalAlignment="Left"
Classes="Margin8" VerticalAlignment="Center"
Content="{x:Static resx:ResUI.menuCheckUpdate}" /> Text="{x:Static resx:ResUI.TbSettingsEnableCheckPreReleaseUpdate}" />
</StackPanel> <ToggleSwitch
x:Name="togEnableCheckPreReleaseUpdate"
Margin="{StaticResource Margin4}"
HorizontalAlignment="Left" />
<Button
x:Name="btnCheckUpdate"
Width="100"
Margin="{StaticResource Margin4}"
Content="{x:Static resx:ResUI.menuCheckUpdate}" />
</StackPanel>
</Border>
<Border <Border
Margin="4" Margin="{StaticResource Margin4}"
VerticalAlignment="Center" VerticalAlignment="Center"
Theme="{DynamicResource CardBorder}"> Theme="{DynamicResource CardBorder}">
<ListBox <ListBox
x:Name="lstCheckUpdates" x:Name="lstCheckUpdates"
BorderThickness="1" BorderThickness="1"
ItemsSource="{Binding CheckUpdateModels}" ItemsSource="{Binding CheckUpdateModels}">
Theme="{StaticResource ButtonRadioGroupListBox}">
<ItemsControl.ItemsPanel> <ItemsControl.ItemsPanel>
<ItemsPanelTemplate> <ItemsPanelTemplate>
<StackPanel Orientation="Vertical" /> <StackPanel Orientation="Vertical" />
@@ -57,7 +62,7 @@
<ToggleSwitch <ToggleSwitch
x:Name="togAutoRefresh" x:Name="togAutoRefresh"
Grid.Column="0" Grid.Column="0"
Margin="8" Margin="{StaticResource Margin4}"
HorizontalAlignment="Left" HorizontalAlignment="Left"
VerticalAlignment="Center" VerticalAlignment="Center"
IsChecked="{Binding IsSelected}" /> IsChecked="{Binding IsSelected}" />
@@ -79,4 +84,4 @@
</ListBox> </ListBox>
</Border> </Border>
</DockPanel> </DockPanel>
</UserControl> </UserControl>

View File

@@ -14,59 +14,51 @@
<DockPanel Margin="2"> <DockPanel Margin="2">
<WrapPanel <WrapPanel
VerticalAlignment="Center" VerticalAlignment="Center"
Classes="Margin8" Margin="{StaticResource Margin4}"
DockPanel.Dock="Top" DockPanel.Dock="Top"
Orientation="Horizontal"> Orientation="Horizontal">
<TextBox <TextBox
x:Name="txtHostFilter" x:Name="txtHostFilter"
Width="200" Width="200"
Margin="8,0"
VerticalContentAlignment="Center" VerticalContentAlignment="Center"
Margin="{StaticResource MarginLr8}"
Watermark="{x:Static resx:ResUI.ConnectionsHostFilterTitle}" /> Watermark="{x:Static resx:ResUI.ConnectionsHostFilterTitle}" />
<Button <Button
x:Name="btnConnectionCloseAll" x:Name="btnConnectionCloseAll"
Width="30" Width="{StaticResource IconButtonWidth}"
Height="30" Height="{StaticResource IconButtonHeight}"
Margin="8,0"
Classes="Success" Classes="Success"
Margin="{StaticResource MarginLr8}"
Theme="{DynamicResource BorderlessButton}" Theme="{DynamicResource BorderlessButton}"
ToolTip.Tip="{x:Static resx:ResUI.menuConnectionCloseAll}"> ToolTip.Tip="{x:Static resx:ResUI.menuConnectionCloseAll}">
<Button.Content> <Button.Content>
<PathIcon <PathIcon Data="{StaticResource building_delete}" Foreground="{DynamicResource ButtonDefaultTertiaryForeground}" />
Width="20"
Height="20"
Data="{StaticResource building_delete}"
Foreground="{DynamicResource ButtonDefaultTertiaryForeground}" />
</Button.Content> </Button.Content>
</Button> </Button>
<Button <Button
x:Name="btnAutofitColumnWidth" x:Name="btnAutofitColumnWidth"
Width="30" Width="{StaticResource IconButtonWidth}"
Height="30" Height="{StaticResource IconButtonHeight}"
Margin="8,0"
Classes="Success" Classes="Success"
Margin="{StaticResource MarginLr8}"
Theme="{DynamicResource BorderlessButton}" Theme="{DynamicResource BorderlessButton}"
ToolTip.Tip="{x:Static resx:ResUI.menuProfileAutofitColumnWidth}"> ToolTip.Tip="{x:Static resx:ResUI.menuProfileAutofitColumnWidth}">
<Button.Content> <Button.Content>
<PathIcon <PathIcon Data="{StaticResource building_fit}" Foreground="{DynamicResource ButtonDefaultTertiaryForeground}" />
Width="20"
Height="20"
Data="{StaticResource building_fit}"
Foreground="{DynamicResource ButtonDefaultTertiaryForeground}" />
</Button.Content> </Button.Content>
</Button> </Button>
<TextBlock <TextBlock
Margin="8,0"
VerticalAlignment="Center" VerticalAlignment="Center"
Margin="{StaticResource MarginLr8}"
Text="{x:Static resx:ResUI.TbAutoRefresh}" /> Text="{x:Static resx:ResUI.TbAutoRefresh}" />
<ToggleSwitch <ToggleSwitch
x:Name="togAutoRefresh" x:Name="togAutoRefresh"
Margin="8,0" HorizontalAlignment="Left"
HorizontalAlignment="Left" /> Margin="{StaticResource MarginLr8}" />
</WrapPanel> </WrapPanel>
<DataGrid <DataGrid
@@ -108,4 +100,4 @@
</DataGrid.Columns> </DataGrid.Columns>
</DataGrid> </DataGrid>
</DockPanel> </DockPanel>
</UserControl> </UserControl>

View File

@@ -17,32 +17,32 @@
<DockPanel Margin="2"> <DockPanel Margin="2">
<WrapPanel <WrapPanel
Margin="{StaticResource Margin4}"
VerticalAlignment="Center" VerticalAlignment="Center"
Classes="Margin8"
DockPanel.Dock="Top" DockPanel.Dock="Top"
Orientation="Horizontal"> Orientation="Horizontal">
<TextBlock <TextBlock
Margin="8,0" Margin="{StaticResource MarginLr8}"
VerticalAlignment="Center" VerticalAlignment="Center"
Text="{x:Static resx:ResUI.menuRulemode}" /> Text="{x:Static resx:ResUI.menuRulemode}" />
<ComboBox <ComboBox
x:Name="cmbRulemode" x:Name="cmbRulemode"
Width="100" Width="100"
Margin="8,0"> Margin="{StaticResource MarginLr8}">
<ComboBoxItem Content="{x:Static resx:ResUI.menuModeRule}" /> <ComboBoxItem Content="{x:Static resx:ResUI.menuModeRule}" />
<ComboBoxItem Content="{x:Static resx:ResUI.menuModeGlobal}" /> <ComboBoxItem Content="{x:Static resx:ResUI.menuModeGlobal}" />
<ComboBoxItem Content="{x:Static resx:ResUI.menuModeDirect}" /> <ComboBoxItem Content="{x:Static resx:ResUI.menuModeDirect}" />
</ComboBox> </ComboBox>
<TextBlock <TextBlock
Margin="8,0" Margin="{StaticResource MarginLr8}"
VerticalAlignment="Center" VerticalAlignment="Center"
Text="{x:Static resx:ResUI.TbSorting}" /> Text="{x:Static resx:ResUI.TbSorting}" />
<ComboBox <ComboBox
x:Name="cmbSorting" x:Name="cmbSorting"
Width="100" Width="100"
Margin="8,0"> Margin="{StaticResource MarginLr8}">
<ComboBoxItem Content="{x:Static resx:ResUI.TbSortingDelay}" /> <ComboBoxItem Content="{x:Static resx:ResUI.TbSortingDelay}" />
<ComboBoxItem Content="{x:Static resx:ResUI.TbSortingName}" /> <ComboBoxItem Content="{x:Static resx:ResUI.TbSortingName}" />
<ComboBoxItem Content="{x:Static resx:ResUI.TbSortingDefault}" /> <ComboBoxItem Content="{x:Static resx:ResUI.TbSortingDefault}" />
@@ -50,53 +50,44 @@
<Button <Button
x:Name="menuProxiesReload" x:Name="menuProxiesReload"
Width="30" Width="{StaticResource IconButtonWidth}"
Height="30" Height="{StaticResource IconButtonHeight}"
Margin="8,0" Margin="{StaticResource MarginLr8}"
Classes="Success" Classes="Success"
Theme="{DynamicResource BorderlessButton}" Theme="{DynamicResource BorderlessButton}"
ToolTip.Tip="{x:Static resx:ResUI.menuProxiesReload}"> ToolTip.Tip="{x:Static resx:ResUI.menuProxiesReload}">
<Button.Content> <Button.Content>
<PathIcon <PathIcon Data="{StaticResource building_refresh}" Foreground="{DynamicResource ButtonDefaultTertiaryForeground}" />
Width="20"
Height="20"
Data="{StaticResource building_refresh}"
Foreground="{DynamicResource ButtonDefaultTertiaryForeground}" />
</Button.Content> </Button.Content>
</Button> </Button>
<Button <Button
x:Name="menuProxiesDelaytest" x:Name="menuProxiesDelaytest"
Width="30" Width="{StaticResource IconButtonWidth}"
Height="30" Height="{StaticResource IconButtonHeight}"
Margin="8,0" Margin="{StaticResource MarginLr8}"
Classes="Success" Classes="Success"
Theme="{DynamicResource BorderlessButton}" Theme="{DynamicResource BorderlessButton}"
ToolTip.Tip="{x:Static resx:ResUI.menuProxiesDelaytest}"> ToolTip.Tip="{x:Static resx:ResUI.menuProxiesDelaytest}">
<Button.Content> <Button.Content>
<PathIcon <PathIcon Data="{StaticResource building_ping}" Foreground="{DynamicResource ButtonDefaultTertiaryForeground}" />
Width="20"
Height="20"
Data="{StaticResource building_ping}"
Foreground="{DynamicResource ButtonDefaultTertiaryForeground}" />
</Button.Content> </Button.Content>
</Button> </Button>
<TextBlock <TextBlock
Margin="8,0" Margin="{StaticResource MarginLr8}"
VerticalAlignment="Center" VerticalAlignment="Center"
Text="{x:Static resx:ResUI.TbAutoRefresh}" /> Text="{x:Static resx:ResUI.TbAutoRefresh}" />
<ToggleSwitch <ToggleSwitch
x:Name="togAutoRefresh" x:Name="togAutoRefresh"
Margin="8,0" Margin="{StaticResource MarginLr8}"
HorizontalAlignment="Left" /> HorizontalAlignment="Left" />
</WrapPanel> </WrapPanel>
<DockPanel> <DockPanel>
<ListBox <ListBox
x:Name="lstProxyGroups" x:Name="lstProxyGroups"
DockPanel.Dock="Left" DockPanel.Dock="Left"
ItemsSource="{Binding ProxyGroups}" ItemsSource="{Binding ProxyGroups}">
Theme="{StaticResource ButtonRadioGroupListBox}">
<ItemsControl.ItemsPanel> <ItemsControl.ItemsPanel>
<ItemsPanelTemplate> <ItemsPanelTemplate>
<StackPanel Orientation="Vertical" /> <StackPanel Orientation="Vertical" />
@@ -104,27 +95,24 @@
</ItemsControl.ItemsPanel> </ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate> <ItemsControl.ItemTemplate>
<DataTemplate> <DataTemplate>
<Border <Label
Width="160" Width="160"
Margin="-8,-4" Margin="-4,-6"
Padding="0" Padding="0"
Theme="{StaticResource CardBorder}"> Theme="{DynamicResource TagLabel}">
<Grid Classes="Margin8" RowDefinitions="1*,8,1*"> <Grid Margin="{StaticResource Margin4}" RowDefinitions="1*,8,1*">
<DockPanel Grid.Row="0"> <DockPanel Grid.Row="0">
<TextBlock DockPanel.Dock="Right" Text="{Binding Type}" /> <TextBlock DockPanel.Dock="Right" Text="{Binding Type}" />
<TextBlock Text="{Binding Name}" /> <TextBlock Text="{Binding Name}" />
</DockPanel> </DockPanel>
<TextBlock Grid.Row="2" Text="{Binding Now}" /> <TextBlock Grid.Row="2" Text="{Binding Now}" />
</Grid> </Grid>
</Border> </Label>
</DataTemplate> </DataTemplate>
</ItemsControl.ItemTemplate> </ItemsControl.ItemTemplate>
</ListBox> </ListBox>
<ListBox <ListBox x:Name="lstProxyDetails" ItemsSource="{Binding ProxyDetails}">
x:Name="lstProxyDetails"
ItemsSource="{Binding ProxyDetails}"
Theme="{StaticResource ButtonRadioGroupListBox}">
<ItemsControl.ContextMenu> <ItemsControl.ContextMenu>
<ContextMenu> <ContextMenu>
<MenuItem x:Name="menuProxiesDelaytestPart" Header="{x:Static resx:ResUI.menuProxiesDelaytestPart}" /> <MenuItem x:Name="menuProxiesDelaytestPart" Header="{x:Static resx:ResUI.menuProxiesDelaytestPart}" />
@@ -138,11 +126,11 @@
</ItemsControl.ItemsPanel> </ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate> <ItemsControl.ItemTemplate>
<DataTemplate> <DataTemplate>
<Border <Label
Width="160" Width="160"
Margin="-12,-4" Margin="-10,-6"
Padding="0" Padding="0"
Theme="{StaticResource CardBorder}"> Theme="{DynamicResource TagLabel}">
<DockPanel> <DockPanel>
<Border <Border
Width="5" Width="5"
@@ -151,7 +139,7 @@
CornerRadius="4" CornerRadius="4"
DockPanel.Dock="Left" DockPanel.Dock="Left"
IsVisible="{Binding IsActive}" /> IsVisible="{Binding IsActive}" />
<Grid Classes="Margin8" RowDefinitions="1*,8,1*"> <Grid Margin="{StaticResource Margin4}" RowDefinitions="1*,8,1*">
<TextBlock Grid.Row="0" Text="{Binding Name}" /> <TextBlock Grid.Row="0" Text="{Binding Name}" />
<DockPanel Grid.Row="2"> <DockPanel Grid.Row="2">
<TextBlock <TextBlock
@@ -162,10 +150,10 @@
</DockPanel> </DockPanel>
</Grid> </Grid>
</DockPanel> </DockPanel>
</Border> </Label>
</DataTemplate> </DataTemplate>
</ItemsControl.ItemTemplate> </ItemsControl.ItemTemplate>
</ListBox> </ListBox>
</DockPanel> </DockPanel>
</DockPanel> </DockPanel>
</UserControl> </UserControl>

View File

@@ -1,4 +1,4 @@
<Window <Window
x:Class="v2rayN.Desktop.Views.DNSSettingWindow" x:Class="v2rayN.Desktop.Views.DNSSettingWindow"
xmlns="https://github.com/avaloniaui" xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
@@ -13,10 +13,10 @@
ShowInTaskbar="False" ShowInTaskbar="False"
WindowStartupLocation="CenterScreen" WindowStartupLocation="CenterScreen"
mc:Ignorable="d"> mc:Ignorable="d">
<DockPanel Classes="Margin8"> <DockPanel Margin="{StaticResource Margin8}">
<StackPanel <StackPanel
Margin="{StaticResource Margin4}"
HorizontalAlignment="Center" HorizontalAlignment="Center"
Classes="Margin8"
DockPanel.Dock="Bottom" DockPanel.Dock="Bottom"
Orientation="Horizontal"> Orientation="Horizontal">
<Button <Button
@@ -28,7 +28,7 @@
<Button <Button
x:Name="btnCancel" x:Name="btnCancel"
Width="100" Width="100"
Margin="8,0" Margin="{StaticResource MarginLr8}"
Content="{x:Static resx:ResUI.TbCancel}" Content="{x:Static resx:ResUI.TbCancel}"
Cursor="Hand" Cursor="Hand"
IsCancel="True" /> IsCancel="True" />
@@ -36,21 +36,21 @@
<TabControl HorizontalContentAlignment="Left"> <TabControl HorizontalContentAlignment="Left">
<TabItem Header="{x:Static resx:ResUI.TbSettingsCoreDns}"> <TabItem Header="{x:Static resx:ResUI.TbSettingsCoreDns}">
<DockPanel Classes="Margin8"> <DockPanel Margin="{StaticResource Margin8}">
<StackPanel DockPanel.Dock="Top" Orientation="Horizontal"> <StackPanel DockPanel.Dock="Top" Orientation="Horizontal">
<TextBlock <TextBlock
Margin="{StaticResource Margin4}"
VerticalAlignment="Center" VerticalAlignment="Center"
Classes="Margin8"
Text="{x:Static resx:ResUI.TbSettingsRemoteDNS}" /> Text="{x:Static resx:ResUI.TbSettingsRemoteDNS}" />
<TextBlock VerticalAlignment="Center" Classes="Margin8"> <TextBlock Margin="{StaticResource Margin4}" VerticalAlignment="Center">
<HyperlinkButton Classes="WithIcon" Click="linkDnsObjectDoc_Click"> <HyperlinkButton Classes="WithIcon" Click="linkDnsObjectDoc_Click">
<TextBlock Text="{x:Static resx:ResUI.TbDnsObjectDoc}" /> <TextBlock Text="{x:Static resx:ResUI.TbDnsObjectDoc}" />
</HyperlinkButton> </HyperlinkButton>
</TextBlock> </TextBlock>
<Button <Button
x:Name="btnImportDefConfig4V2ray" x:Name="btnImportDefConfig4V2ray"
Classes="Margin8" Margin="{StaticResource Margin4}"
Content="{x:Static resx:ResUI.TbSettingDnsImportDefConfig}" Content="{x:Static resx:ResUI.TbSettingDnsImportDefConfig}"
Cursor="Hand" /> Cursor="Hand" />
</StackPanel> </StackPanel>
@@ -58,44 +58,45 @@
<WrapPanel DockPanel.Dock="Bottom" Orientation="Horizontal"> <WrapPanel DockPanel.Dock="Bottom" Orientation="Horizontal">
<StackPanel Orientation="Horizontal"> <StackPanel Orientation="Horizontal">
<TextBlock <TextBlock
Margin="{StaticResource Margin4}"
VerticalAlignment="Center" VerticalAlignment="Center"
Classes="Margin8"
Text="{x:Static resx:ResUI.TbSettingsUseSystemHosts}" /> Text="{x:Static resx:ResUI.TbSettingsUseSystemHosts}" />
<ToggleSwitch <ToggleSwitch
x:Name="togUseSystemHosts" x:Name="togUseSystemHosts"
HorizontalAlignment="Left" Margin="{StaticResource Margin4}"
Classes="Margin8" /> HorizontalAlignment="Left" />
</StackPanel> </StackPanel>
<StackPanel Orientation="Horizontal"> <StackPanel Orientation="Horizontal">
<TextBlock <TextBlock
Margin="{StaticResource Margin4}"
VerticalAlignment="Center" VerticalAlignment="Center"
Classes="Margin8"
Text="{x:Static resx:ResUI.TbSettingsDomainStrategy4Freedom}" /> Text="{x:Static resx:ResUI.TbSettingsDomainStrategy4Freedom}" />
<ComboBox <ComboBox
x:Name="cmbdomainStrategy4Freedom" x:Name="cmbdomainStrategy4Freedom"
Width="150" Width="150"
Classes="Margin8" /> Margin="{StaticResource Margin4}" />
</StackPanel> </StackPanel>
<StackPanel Orientation="Horizontal"> <StackPanel Orientation="Horizontal">
<TextBlock <TextBlock
Margin="{StaticResource Margin4}"
VerticalAlignment="Center" VerticalAlignment="Center"
Classes="Margin8"
Text="{x:Static resx:ResUI.TbSettingsDomainDNSAddress}" /> Text="{x:Static resx:ResUI.TbSettingsDomainDNSAddress}" />
<ComboBox <ComboBox
x:Name="cmbdomainDNSAddress" x:Name="cmbdomainDNSAddress"
Width="150" Width="150"
Classes="Margin8" /> Margin="{StaticResource Margin4}" />
</StackPanel> </StackPanel>
</WrapPanel> </WrapPanel>
<Grid Classes="Margin8"> <Grid Margin="{StaticResource Margin4}">
<TextBox <TextBox
x:Name="txtnormalDNS" x:Name="txtnormalDNS"
Margin="{StaticResource Margin4}"
VerticalAlignment="Stretch" VerticalAlignment="Stretch"
BorderThickness="1" BorderThickness="1"
Classes="TextArea Margin8" Classes="TextArea"
TextWrapping="Wrap" TextWrapping="Wrap"
Watermark="HTTP/SOCKS" /> Watermark="HTTP/SOCKS" />
</Grid> </Grid>
@@ -103,16 +104,16 @@
</TabItem> </TabItem>
<TabItem Header="{x:Static resx:ResUI.TbSettingsCoreDnsSingbox}"> <TabItem Header="{x:Static resx:ResUI.TbSettingsCoreDnsSingbox}">
<DockPanel Classes="Margin8"> <DockPanel Margin="{StaticResource Margin8}">
<StackPanel DockPanel.Dock="Top" Orientation="Horizontal"> <StackPanel DockPanel.Dock="Top" Orientation="Horizontal">
<TextBlock VerticalAlignment="Center" Classes="Margin8"> <TextBlock Margin="{StaticResource Margin4}" VerticalAlignment="Center">
<HyperlinkButton Classes="WithIcon" Click="linkDnsSingboxObjectDoc_Click"> <HyperlinkButton Classes="WithIcon" Click="linkDnsSingboxObjectDoc_Click">
<TextBlock Text="{x:Static resx:ResUI.TbDnsSingboxObjectDoc}" /> <TextBlock Text="{x:Static resx:ResUI.TbDnsSingboxObjectDoc}" />
</HyperlinkButton> </HyperlinkButton>
</TextBlock> </TextBlock>
<Button <Button
x:Name="btnImportDefConfig4Singbox" x:Name="btnImportDefConfig4Singbox"
Classes="Margin8" Margin="{StaticResource Margin4}"
Content="{x:Static resx:ResUI.TbSettingDnsImportDefConfig}" Content="{x:Static resx:ResUI.TbSettingDnsImportDefConfig}"
Cursor="Hand" /> Cursor="Hand" />
</StackPanel> </StackPanel>
@@ -120,28 +121,28 @@
<WrapPanel DockPanel.Dock="Bottom" Orientation="Horizontal"> <WrapPanel DockPanel.Dock="Bottom" Orientation="Horizontal">
<StackPanel Orientation="Horizontal"> <StackPanel Orientation="Horizontal">
<TextBlock <TextBlock
Margin="{StaticResource Margin4}"
VerticalAlignment="Center" VerticalAlignment="Center"
Classes="Margin8"
Text="{x:Static resx:ResUI.TbSettingsDomainStrategy4Out}" /> Text="{x:Static resx:ResUI.TbSettingsDomainStrategy4Out}" />
<ComboBox <ComboBox
x:Name="cmbdomainStrategy4Out" x:Name="cmbdomainStrategy4Out"
Width="150" Width="150"
Classes="Margin8" /> Margin="{StaticResource Margin4}" />
</StackPanel> </StackPanel>
<StackPanel Orientation="Horizontal"> <StackPanel Orientation="Horizontal">
<TextBlock <TextBlock
Margin="{StaticResource Margin4}"
VerticalAlignment="Center" VerticalAlignment="Center"
Classes="Margin8"
Text="{x:Static resx:ResUI.TbSettingsDomainDNSAddress}" /> Text="{x:Static resx:ResUI.TbSettingsDomainDNSAddress}" />
<ComboBox <ComboBox
x:Name="cmbdomainDNSAddress2" x:Name="cmbdomainDNSAddress2"
Width="150" Width="150"
Classes="Margin8" /> Margin="{StaticResource Margin4}" />
</StackPanel> </StackPanel>
</WrapPanel> </WrapPanel>
<Grid Classes="Margin8" ColumnDefinitions="*,10,*"> <Grid Margin="{StaticResource Margin4}" ColumnDefinitions="*,10,*">
<TextBox <TextBox
x:Name="txtnormalDNS2" x:Name="txtnormalDNS2"
@@ -150,7 +151,8 @@
HorizontalAlignment="Stretch" HorizontalAlignment="Stretch"
VerticalAlignment="Stretch" VerticalAlignment="Stretch"
BorderThickness="1" BorderThickness="1"
Classes="TextArea Margin8" Classes="TextArea"
Margin="{StaticResource Margin4}"
TextWrapping="Wrap" TextWrapping="Wrap"
Watermark="HTTP/SOCKS" /> Watermark="HTTP/SOCKS" />
@@ -163,7 +165,8 @@
HorizontalAlignment="Stretch" HorizontalAlignment="Stretch"
VerticalAlignment="Stretch" VerticalAlignment="Stretch"
BorderThickness="1" BorderThickness="1"
Classes="TextArea Margin8" Classes="TextArea"
Margin="{StaticResource Margin4}"
TextWrapping="Wrap" TextWrapping="Wrap"
Watermark="{x:Static resx:ResUI.TbSettingsTunMode}" /> Watermark="{x:Static resx:ResUI.TbSettingsTunMode}" />
</Grid> </Grid>
@@ -171,4 +174,4 @@
</TabItem> </TabItem>
</TabControl> </TabControl>
</DockPanel> </DockPanel>
</Window> </Window>

View File

@@ -1,4 +1,4 @@
<Window <Window
x:Class="v2rayN.Desktop.Views.GlobalHotkeySettingWindow" x:Class="v2rayN.Desktop.Views.GlobalHotkeySettingWindow"
xmlns="https://github.com/avaloniaui" xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
@@ -13,16 +13,16 @@
ShowInTaskbar="False" ShowInTaskbar="False"
WindowStartupLocation="CenterScreen" WindowStartupLocation="CenterScreen"
mc:Ignorable="d"> mc:Ignorable="d">
<DockPanel Classes="Margin8"> <DockPanel Margin="{StaticResource Margin8}">
<StackPanel <StackPanel
HorizontalAlignment="Center" HorizontalAlignment="Center"
Classes="Margin8" Margin="{StaticResource Margin4}"
DockPanel.Dock="Bottom" DockPanel.Dock="Bottom"
Orientation="Horizontal"> Orientation="Horizontal">
<Button <Button
x:Name="btnReset" x:Name="btnReset"
Width="100" Width="100"
Margin="8,0" Margin="{StaticResource MarginLr8}"
Content="{x:Static resx:ResUI.TbReset}" /> Content="{x:Static resx:ResUI.TbReset}" />
<Button <Button
x:Name="btnSave" x:Name="btnSave"
@@ -33,7 +33,7 @@
<Button <Button
x:Name="btnCancel" x:Name="btnCancel"
Width="100" Width="100"
Margin="8,0" Margin="{StaticResource MarginLr8}"
Content="{x:Static resx:ResUI.TbCancel}" Content="{x:Static resx:ResUI.TbCancel}"
Cursor="Hand" Cursor="Hand"
IsCancel="True" /> IsCancel="True" />
@@ -49,14 +49,14 @@
<TextBlock <TextBlock
Grid.Row="0" Grid.Row="0"
Grid.Column="0" Grid.Column="0"
Classes="Margin8" Margin="{StaticResource Margin4}"
Text="{x:Static resx:ResUI.TbGlobalHotkeySetting}" /> Text="{x:Static resx:ResUI.TbGlobalHotkeySetting}" />
<TextBlock <TextBlock
Grid.Row="1" Grid.Row="1"
Grid.Column="0" Grid.Column="0"
VerticalAlignment="Center" VerticalAlignment="Center"
Classes="Margin8" Margin="{StaticResource Margin4}"
Text="{x:Static resx:ResUI.TbDisplayGUI}" /> Text="{x:Static resx:ResUI.TbDisplayGUI}" />
<TextBox <TextBox
@@ -64,70 +64,70 @@
Grid.Row="1" Grid.Row="1"
Grid.Column="1" Grid.Column="1"
VerticalAlignment="Center" VerticalAlignment="Center"
Classes="Margin8" Margin="{StaticResource Margin4}"
IsReadOnly="True" /> IsReadOnly="True" />
<TextBlock <TextBlock
Grid.Row="2" Grid.Row="2"
Grid.Column="0" Grid.Column="0"
VerticalAlignment="Center" VerticalAlignment="Center"
Classes="Margin8" Margin="{StaticResource Margin4}"
Text="{x:Static resx:ResUI.TbClearSystemProxy}" /> Text="{x:Static resx:ResUI.TbClearSystemProxy}" />
<TextBox <TextBox
x:Name="txtGlobalHotkey1" x:Name="txtGlobalHotkey1"
Grid.Row="2" Grid.Row="2"
Grid.Column="1" Grid.Column="1"
VerticalAlignment="Center" VerticalAlignment="Center"
Classes="Margin8" Margin="{StaticResource Margin4}"
IsReadOnly="True" /> IsReadOnly="True" />
<TextBlock <TextBlock
Grid.Row="3" Grid.Row="3"
Grid.Column="0" Grid.Column="0"
VerticalAlignment="Center" VerticalAlignment="Center"
Classes="Margin8" Margin="{StaticResource Margin4}"
Text="{x:Static resx:ResUI.TbSetSystemProxy}" /> Text="{x:Static resx:ResUI.TbSetSystemProxy}" />
<TextBox <TextBox
x:Name="txtGlobalHotkey2" x:Name="txtGlobalHotkey2"
Grid.Row="3" Grid.Row="3"
Grid.Column="1" Grid.Column="1"
VerticalAlignment="Center" VerticalAlignment="Center"
Classes="Margin8" Margin="{StaticResource Margin4}"
IsReadOnly="True" /> IsReadOnly="True" />
<TextBlock <TextBlock
Grid.Row="4" Grid.Row="4"
Grid.Column="0" Grid.Column="0"
VerticalAlignment="Center" VerticalAlignment="Center"
Classes="Margin8" Margin="{StaticResource Margin4}"
Text="{x:Static resx:ResUI.TbNotChangeSystemProxy}" /> Text="{x:Static resx:ResUI.TbNotChangeSystemProxy}" />
<TextBox <TextBox
x:Name="txtGlobalHotkey3" x:Name="txtGlobalHotkey3"
Grid.Row="4" Grid.Row="4"
Grid.Column="1" Grid.Column="1"
VerticalAlignment="Center" VerticalAlignment="Center"
Classes="Margin8" Margin="{StaticResource Margin4}"
IsReadOnly="True" /> IsReadOnly="True" />
<TextBlock <TextBlock
Grid.Row="5" Grid.Row="5"
Grid.Column="0" Grid.Column="0"
VerticalAlignment="Center" VerticalAlignment="Center"
Classes="Margin8" Margin="{StaticResource Margin4}"
Text="{x:Static resx:ResUI.TbSystemProxyPac}" /> Text="{x:Static resx:ResUI.TbSystemProxyPac}" />
<TextBox <TextBox
x:Name="txtGlobalHotkey4" x:Name="txtGlobalHotkey4"
Grid.Row="5" Grid.Row="5"
Grid.Column="1" Grid.Column="1"
VerticalAlignment="Center" VerticalAlignment="Center"
Classes="Margin8" Margin="{StaticResource Margin4}"
IsReadOnly="True" /> IsReadOnly="True" />
</Grid> </Grid>
<TextBlock <TextBlock
Grid.Row="1" Grid.Row="1"
VerticalAlignment="Center" VerticalAlignment="Center"
Classes="Margin8" Margin="{StaticResource Margin4}"
Text="{x:Static resx:ResUI.TbGlobalHotkeySettingTip}" /> Text="{x:Static resx:ResUI.TbGlobalHotkeySettingTip}" />
</Grid> </Grid>
</ScrollViewer> </ScrollViewer>
</DockPanel> </DockPanel>
</Window> </Window>

View File

@@ -22,7 +22,7 @@
CloseOnClickAway="True" CloseOnClickAway="True"
DisableOpeningAnimation="True"> DisableOpeningAnimation="True">
<DockPanel> <DockPanel>
<DockPanel Classes="Margin8" DockPanel.Dock="Top"> <DockPanel Margin="{StaticResource Margin8}" DockPanel.Dock="Top">
<ContentControl x:Name="conTheme" DockPanel.Dock="Right" /> <ContentControl x:Name="conTheme" DockPanel.Dock="Right" />
<Menu Margin="0,1"> <Menu Margin="0,1">
<MenuItem Padding="8,0"> <MenuItem Padding="8,0">

View File

@@ -414,18 +414,17 @@ namespace v2rayN.Desktop.Views
} }
else else
{ {
if (Utils.IsOSX() || _config.UiItem.Hide2TrayWhenClose) if (Utils.IsLinux() && _config.UiItem.Hide2TrayWhenClose == false)
{
foreach (var ownedWindow in this.OwnedWindows)
{
ownedWindow.Close();
}
this.Hide();
}
else
{ {
this.WindowState = WindowState.Minimized; this.WindowState = WindowState.Minimized;
return;
} }
foreach (var ownedWindow in this.OwnedWindows)
{
ownedWindow.Close();
}
this.Hide();
} }
_config.UiItem.ShowInTaskbar = bl; _config.UiItem.ShowInTaskbar = bl;

View File

@@ -11,79 +11,69 @@
<DockPanel Margin="2"> <DockPanel Margin="2">
<WrapPanel <WrapPanel
VerticalAlignment="Center" VerticalAlignment="Center"
Classes="Margin8" Margin="{StaticResource Margin4}"
DockPanel.Dock="Top" DockPanel.Dock="Top"
Orientation="Horizontal"> Orientation="Horizontal">
<TextBox <TextBox
x:Name="cmbMsgFilter" x:Name="cmbMsgFilter"
Width="200" Width="200"
Margin="8,0" Margin="{StaticResource MarginLr8}"
VerticalContentAlignment="Center" VerticalContentAlignment="Center"
Watermark="{x:Static resx:ResUI.MsgFilterTitle}" /> Watermark="{x:Static resx:ResUI.MsgFilterTitle}" />
<Button <Button
x:Name="btnCopy" x:Name="btnCopy"
Width="30" Width="{StaticResource IconButtonWidth}"
Height="30" Height="{StaticResource IconButtonHeight}"
Margin="8,0" Margin="{StaticResource MarginLr8}"
Classes="Success" Classes="Success"
Click="menuMsgViewCopyAll_Click" Click="menuMsgViewCopyAll_Click"
Theme="{DynamicResource BorderlessButton}" Theme="{DynamicResource BorderlessButton}"
ToolTip.Tip="{x:Static resx:ResUI.menuMsgViewCopyAll}"> ToolTip.Tip="{x:Static resx:ResUI.menuMsgViewCopyAll}">
<Button.Content> <Button.Content>
<PathIcon <PathIcon Data="{StaticResource building_copy}" Foreground="{DynamicResource ButtonDefaultTertiaryForeground}" />
Width="20"
Height="20"
Data="{StaticResource building_copy}"
Foreground="{DynamicResource ButtonDefaultTertiaryForeground}" />
</Button.Content> </Button.Content>
</Button> </Button>
<Button <Button
x:Name="btnClear" x:Name="btnClear"
Width="30" Margin="{StaticResource MarginLr8}"
Height="30"
Margin="8,0"
Classes="Success" Classes="Success"
Click="menuMsgViewClear_Click" Click="menuMsgViewClear_Click"
Theme="{DynamicResource BorderlessButton}" Theme="{DynamicResource BorderlessButton}"
ToolTip.Tip="{x:Static resx:ResUI.menuMsgViewClear}"> ToolTip.Tip="{x:Static resx:ResUI.menuMsgViewClear}">
<Button.Content> <Button.Content>
<PathIcon <PathIcon Data="{StaticResource building_delete}" Foreground="{DynamicResource ButtonDefaultTertiaryForeground}" />
Width="20"
Height="20"
Data="{StaticResource building_delete}"
Foreground="{DynamicResource ButtonDefaultTertiaryForeground}" />
</Button.Content> </Button.Content>
</Button> </Button>
<TextBlock <TextBlock
Margin="8,0" Margin="{StaticResource MarginLr8}"
VerticalAlignment="Center" VerticalAlignment="Center"
Text="{x:Static resx:ResUI.TbAutoRefresh}" /> Text="{x:Static resx:ResUI.TbAutoRefresh}" />
<ToggleSwitch <ToggleSwitch
x:Name="togAutoRefresh" x:Name="togAutoRefresh"
Margin="8,0" Margin="{StaticResource MarginLr8}"
HorizontalAlignment="Left" HorizontalAlignment="Left"
IsChecked="True" IsChecked="True"
Theme="{DynamicResource SimpleToggleSwitch}" /> Theme="{DynamicResource SimpleToggleSwitch}" />
<TextBlock <TextBlock
Margin="8,0" Margin="{StaticResource MarginLr8}"
VerticalAlignment="Center" VerticalAlignment="Center"
Text="{x:Static resx:ResUI.TbAutoScrollToEnd}" /> Text="{x:Static resx:ResUI.TbAutoScrollToEnd}" />
<ToggleSwitch <ToggleSwitch
x:Name="togScrollToEnd" x:Name="togScrollToEnd"
Margin="8,0" Margin="{StaticResource MarginLr8}"
HorizontalAlignment="Left" HorizontalAlignment="Left"
IsChecked="True" IsChecked="True"
Theme="{DynamicResource SimpleToggleSwitch}" /> Theme="{DynamicResource SimpleToggleSwitch}" />
</WrapPanel> </WrapPanel>
<TextBox <TextBox
Name="txtMsg" Name="txtMsg"
VerticalAlignment="Stretch"
BorderThickness="0" BorderThickness="0"
Classes="TextArea" Classes="TextArea"
IsReadOnly="True" IsReadOnly="True"
TextAlignment="Left" TextAlignment="Left"
VerticalAlignment="Stretch"
TextWrapping="Wrap"> TextWrapping="Wrap">
<TextBox.ContextMenu> <TextBox.ContextMenu>
<ContextMenu> <ContextMenu>
@@ -107,4 +97,4 @@
</TextBox.ContextMenu> </TextBox.ContextMenu>
</TextBox> </TextBox>
</DockPanel> </DockPanel>
</UserControl> </UserControl>

File diff suppressed because it is too large Load Diff

View File

@@ -74,18 +74,11 @@ namespace v2rayN.Desktop.Views
{ {
cmbSpeedTestTimeout.Items.Add(i * 5); cmbSpeedTestTimeout.Items.Add(i * 5);
} }
Global.SpeedTestUrls.ForEach(it =>
{ cmbSpeedTestUrl.ItemsSource = Global.SpeedTestUrls;
cmbSpeedTestUrl.Items.Add(it); cmbSpeedPingTestUrl.ItemsSource = Global.SpeedPingTestUrls;
}); cmbSubConvertUrl.ItemsSource = Global.SubConvertUrls;
Global.SpeedPingTestUrls.ForEach(it =>
{
cmbSpeedPingTestUrl.Items.Add(it);
});
Global.SubConvertUrls.ForEach(it =>
{
cmbSubConvertUrl.Items.Add(it);
});
Global.GeoFilesSources.ForEach(it => Global.GeoFilesSources.ForEach(it =>
{ {
cmbGetFilesSourceUrl.Items.Add(it); cmbGetFilesSourceUrl.Items.Add(it);
@@ -139,12 +132,12 @@ namespace v2rayN.Desktop.Views
this.Bind(ViewModel, vm => vm.Hide2TrayWhenClose, v => v.togHide2TrayWhenClose.IsChecked).DisposeWith(disposables); this.Bind(ViewModel, vm => vm.Hide2TrayWhenClose, v => v.togHide2TrayWhenClose.IsChecked).DisposeWith(disposables);
this.Bind(ViewModel, vm => vm.DoubleClick2Activate, v => v.togDoubleClick2Activate.IsChecked).DisposeWith(disposables); this.Bind(ViewModel, vm => vm.DoubleClick2Activate, v => v.togDoubleClick2Activate.IsChecked).DisposeWith(disposables);
this.Bind(ViewModel, vm => vm.AutoUpdateInterval, v => v.txtautoUpdateInterval.Text).DisposeWith(disposables); this.Bind(ViewModel, vm => vm.AutoUpdateInterval, v => v.txtautoUpdateInterval.Text).DisposeWith(disposables);
this.Bind(ViewModel, vm => vm.CurrentFontFamily, v => v.cmbcurrentFontFamily.SelectedValue).DisposeWith(disposables); this.Bind(ViewModel, vm => vm.CurrentFontFamily, v => v.cmbcurrentFontFamily.Text).DisposeWith(disposables);
this.Bind(ViewModel, vm => vm.SpeedTestTimeout, v => v.cmbSpeedTestTimeout.SelectedValue).DisposeWith(disposables); this.Bind(ViewModel, vm => vm.SpeedTestTimeout, v => v.cmbSpeedTestTimeout.SelectedValue).DisposeWith(disposables);
this.Bind(ViewModel, vm => vm.SpeedTestUrl, v => v.cmbSpeedTestUrl.SelectedValue).DisposeWith(disposables); this.Bind(ViewModel, vm => vm.SpeedTestUrl, v => v.cmbSpeedTestUrl.Text).DisposeWith(disposables);
this.Bind(ViewModel, vm => vm.SpeedPingTestUrl, v => v.cmbSpeedPingTestUrl.SelectedValue).DisposeWith(disposables); this.Bind(ViewModel, vm => vm.SpeedPingTestUrl, v => v.cmbSpeedPingTestUrl.Text).DisposeWith(disposables);
this.Bind(ViewModel, vm => vm.MixedConcurrencyCount, v => v.cmbMixedConcurrencyCount.SelectedValue).DisposeWith(disposables); this.Bind(ViewModel, vm => vm.MixedConcurrencyCount, v => v.cmbMixedConcurrencyCount.SelectedValue).DisposeWith(disposables);
this.Bind(ViewModel, vm => vm.SubConvertUrl, v => v.cmbSubConvertUrl.SelectedValue).DisposeWith(disposables); this.Bind(ViewModel, vm => vm.SubConvertUrl, v => v.cmbSubConvertUrl.Text).DisposeWith(disposables);
this.Bind(ViewModel, vm => vm.MainGirdOrientation, v => v.cmbMainGirdOrientation.SelectedIndex).DisposeWith(disposables); this.Bind(ViewModel, vm => vm.MainGirdOrientation, v => v.cmbMainGirdOrientation.SelectedIndex).DisposeWith(disposables);
this.Bind(ViewModel, vm => vm.GeoFileSourceUrl, v => v.cmbGetFilesSourceUrl.SelectedValue).DisposeWith(disposables); this.Bind(ViewModel, vm => vm.GeoFileSourceUrl, v => v.cmbGetFilesSourceUrl.SelectedValue).DisposeWith(disposables);
this.Bind(ViewModel, vm => vm.SrsFileSourceUrl, v => v.cmbSrsFilesSourceUrl.SelectedValue).DisposeWith(disposables); this.Bind(ViewModel, vm => vm.SrsFileSourceUrl, v => v.cmbSrsFilesSourceUrl.SelectedValue).DisposeWith(disposables);
@@ -174,12 +167,27 @@ namespace v2rayN.Desktop.Views
if (Utils.IsWindows()) if (Utils.IsWindows())
{ {
txbSettingsExceptionTip2.IsVisible = false; txbSettingsExceptionTip2.IsVisible = false;
txtLinuxSudoPassword.IsVisible = false;
labLinuxSudoPassword.IsVisible = false;
labLinuxSudoPasswordTip.IsVisible = false;
labHide2TrayWhenClose.IsVisible = false;
togHide2TrayWhenClose.IsVisible = false;
} }
else else if (Utils.IsLinux())
{ {
txbSettingsExceptionTip.IsVisible = false; txbSettingsExceptionTip.IsVisible = false;
panSystemProxyAdvanced.IsVisible = false; panSystemProxyAdvanced.IsVisible = false;
} }
else if (Utils.IsOSX())
{
txbSettingsExceptionTip.IsVisible = false;
panSystemProxyAdvanced.IsVisible = false;
labHide2TrayWhenClose.IsVisible = false;
togHide2TrayWhenClose.IsVisible = false;
}
} }
private async Task<bool> UpdateViewHandler(EViewAction action, object? obj) private async Task<bool> UpdateViewHandler(EViewAction action, object? obj)
@@ -200,8 +208,9 @@ namespace v2rayN.Desktop.Views
private async Task InitSettingFont() private async Task InitSettingFont()
{ {
var lstFonts = await GetFonts(); var lstFonts = await GetFonts();
lstFonts.ForEach(it => { cmbcurrentFontFamily.Items.Add(it); });
cmbcurrentFontFamily.Items.Add(string.Empty); lstFonts.Add(string.Empty);
cmbcurrentFontFamily.ItemsSource = lstFonts;
} }
private async Task<List<string>> GetFonts() private async Task<List<string>> GetFonts()

View File

@@ -19,65 +19,59 @@
<WrapPanel Margin="2" DockPanel.Dock="Top"> <WrapPanel Margin="2" DockPanel.Dock="Top">
<ListBox <ListBox
x:Name="lstGroup" x:Name="lstGroup"
MaxHeight="200" Margin="{StaticResource MarginLr4}"
DisplayMemberBinding="{Binding Remarks}" DisplayMemberBinding="{Binding Remarks}"
ItemsSource="{Binding SubItems}" ItemsSource="{Binding SubItems}"
Theme="{DynamicResource PureCardRadioGroupListBox}" /> Theme="{DynamicResource PureCardRadioGroupListBox}">
<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<WrapPanel />
</ItemsPanelTemplate>
</ListBox.ItemsPanel>
</ListBox>
<Button <Button
x:Name="btnEditSub" x:Name="btnEditSub"
Width="30" Width="{StaticResource IconButtonWidth}"
Height="30" Height="{StaticResource IconButtonHeight}"
Margin="4,0" Margin="{StaticResource MarginLr4}"
Classes="Success" Classes="Success"
Theme="{DynamicResource BorderlessButton}" Theme="{DynamicResource BorderlessButton}"
ToolTip.Tip="{x:Static resx:ResUI.menuSubEdit}"> ToolTip.Tip="{x:Static resx:ResUI.menuSubEdit}">
<Button.Content> <Button.Content>
<PathIcon <PathIcon Data="{StaticResource building_edit}" Foreground="{DynamicResource ButtonDefaultTertiaryForeground}" />
Width="24"
Height="24"
Data="{StaticResource building_edit}"
Foreground="{DynamicResource ButtonDefaultTertiaryForeground}" />
</Button.Content> </Button.Content>
</Button> </Button>
<Button <Button
x:Name="btnAddSub" x:Name="btnAddSub"
Width="30" Width="{StaticResource IconButtonWidth}"
Height="30" Height="{StaticResource IconButtonHeight}"
Margin="4,0" Margin="{StaticResource MarginLr4}"
Classes="Success" Classes="Success"
Theme="{DynamicResource BorderlessButton}" Theme="{DynamicResource BorderlessButton}"
ToolTip.Tip="{x:Static resx:ResUI.menuSubAdd}"> ToolTip.Tip="{x:Static resx:ResUI.menuSubAdd}">
<Button.Content> <Button.Content>
<PathIcon <PathIcon Data="{StaticResource building_add}" Foreground="{DynamicResource ButtonDefaultTertiaryForeground}" />
Width="24"
Height="24"
Data="{StaticResource building_add}"
Foreground="{DynamicResource ButtonDefaultTertiaryForeground}" />
</Button.Content> </Button.Content>
</Button> </Button>
<Button <Button
x:Name="btnAutofitColumnWidth" x:Name="btnAutofitColumnWidth"
Width="30" Width="{StaticResource IconButtonWidth}"
Height="30" Height="{StaticResource IconButtonHeight}"
Margin="4,0" Margin="{StaticResource MarginLr4}"
Classes="Success" Classes="Success"
Theme="{DynamicResource BorderlessButton}" Theme="{DynamicResource BorderlessButton}"
ToolTip.Tip="{x:Static resx:ResUI.menuProfileAutofitColumnWidth}"> ToolTip.Tip="{x:Static resx:ResUI.menuProfileAutofitColumnWidth}">
<Button.Content> <Button.Content>
<PathIcon <PathIcon Data="{StaticResource building_fit}" Foreground="{DynamicResource ButtonDefaultTertiaryForeground}" />
Width="24"
Height="24"
Data="{StaticResource building_fit}"
Foreground="{DynamicResource ButtonDefaultTertiaryForeground}" />
</Button.Content> </Button.Content>
</Button> </Button>
<TextBox <TextBox
x:Name="txtServerFilter" x:Name="txtServerFilter"
Width="200" Width="200"
Margin="4,0" Margin="{StaticResource MarginLr4}"
VerticalContentAlignment="Center" VerticalContentAlignment="Center"
Watermark="{x:Static resx:ResUI.MsgServerTitle}" /> Watermark="{x:Static resx:ResUI.MsgServerTitle}" />
</WrapPanel> </WrapPanel>
@@ -85,11 +79,13 @@
x:Name="lstProfiles" x:Name="lstProfiles"
AutoGenerateColumns="False" AutoGenerateColumns="False"
BorderThickness="1" BorderThickness="1"
CanUserReorderColumns="True"
CanUserResizeColumns="True" CanUserResizeColumns="True"
GridLinesVisibility="All" GridLinesVisibility="All"
HeadersVisibility="All" HeadersVisibility="All"
IsReadOnly="True" IsReadOnly="True"
ItemsSource="{Binding ProfileItems}"> ItemsSource="{Binding ProfileItems}"
ScrollViewer.AllowAutoHide="False">
<DataGrid.KeyBindings> <DataGrid.KeyBindings>
<KeyBinding Command="{Binding Export2ShareUrlCmd}" Gesture="Ctrl+C" /> <KeyBinding Command="{Binding Export2ShareUrlCmd}" Gesture="Ctrl+C" />
<KeyBinding Command="{Binding SetDefaultServerCmd}" Gesture="Enter" /> <KeyBinding Command="{Binding SetDefaultServerCmd}" Gesture="Enter" />
@@ -161,9 +157,9 @@
</DataGridTemplateColumn.Header> </DataGridTemplateColumn.Header>
<DataGridTemplateColumn.CellTemplate> <DataGridTemplateColumn.CellTemplate>
<DataTemplate> <DataTemplate>
<StackPanel Margin="8,0" Orientation="Horizontal"> <StackPanel Margin="{StaticResource MarginLr8}" Orientation="Horizontal">
<Label <Label
Margin="0,0,8,0" Margin="{StaticResource MarginLr4}"
Classes="Solid Red" Classes="Solid Red"
Content="{x:Static resx:ResUI.TipActiveServer}" Content="{x:Static resx:ResUI.TipActiveServer}"
IsVisible="{Binding IsActive}" IsVisible="{Binding IsActive}"
@@ -209,7 +205,7 @@
<DataGridTemplateColumn.CellTemplate> <DataGridTemplateColumn.CellTemplate>
<DataTemplate> <DataTemplate>
<TextBlock <TextBlock
Margin="8,0" Margin="{StaticResource MarginLr8}"
HorizontalAlignment="Right" HorizontalAlignment="Right"
VerticalAlignment="Center" VerticalAlignment="Center"
Foreground="{Binding Delay, Converter={StaticResource DelayColorConverter}}" Foreground="{Binding Delay, Converter={StaticResource DelayColorConverter}}"

View File

@@ -372,9 +372,8 @@ namespace v2rayN.Desktop.Views
private void StorageUI(string? n = null) private void StorageUI(string? n = null)
{ {
List<ColumnItem> lvColumnItem = new(); List<ColumnItem> lvColumnItem = new();
for (int k = 0; k < lstProfiles.Columns.Count; k++) foreach (var item2 in lstProfiles.Columns)
{ {
var item2 = lstProfiles.Columns[k];
if (item2.Tag == null) if (item2.Tag == null)
{ {
continue; continue;

View File

@@ -1,4 +1,4 @@
<UserControl <UserControl
x:Class="v2rayN.Desktop.Views.QrcodeView" x:Class="v2rayN.Desktop.Views.QrcodeView"
xmlns="https://github.com/avaloniaui" xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
@@ -7,7 +7,7 @@
d:DesignHeight="480" d:DesignHeight="480"
d:DesignWidth="400" d:DesignWidth="400"
mc:Ignorable="d"> mc:Ignorable="d">
<Grid Margin="30" RowDefinitions="Auto,Auto"> <Grid Margin="32" RowDefinitions="Auto,Auto">
<Image <Image
Name="imgQrcode" Name="imgQrcode"
Width="300" Width="300"
@@ -17,10 +17,10 @@
x:Name="txtContent" x:Name="txtContent"
Grid.Row="1" Grid.Row="1"
Width="300" Width="300"
Margin="0,8" Margin="{StaticResource MarginTb8}"
VerticalAlignment="Center" VerticalAlignment="Center"
IsReadOnly="True" IsReadOnly="True"
MaxLines="1" /> MaxLines="1" />
</Grid> </Grid>
</UserControl> </UserControl>

View File

@@ -1,4 +1,4 @@
<Window <Window
x:Class="v2rayN.Desktop.Views.RoutingRuleDetailsWindow" x:Class="v2rayN.Desktop.Views.RoutingRuleDetailsWindow"
xmlns="https://github.com/avaloniaui" xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
@@ -15,7 +15,7 @@
mc:Ignorable="d"> mc:Ignorable="d">
<DockPanel> <DockPanel>
<Grid <Grid
Classes="Margin8" Margin="{StaticResource Margin4}"
ColumnDefinitions="Auto,Auto,Auto" ColumnDefinitions="Auto,Auto,Auto"
DockPanel.Dock="Top" DockPanel.Dock="Top"
RowDefinitions="Auto,Auto,Auto,Auto,Auto,Auto"> RowDefinitions="Auto,Auto,Auto,Auto,Auto,Auto">
@@ -23,7 +23,7 @@
Grid.Row="0" Grid.Row="0"
Grid.Column="0" Grid.Column="0"
VerticalAlignment="Center" VerticalAlignment="Center"
Classes="Margin8" Margin="{StaticResource Margin4}"
Text="{x:Static resx:ResUI.LvRemarks}" /> Text="{x:Static resx:ResUI.LvRemarks}" />
<TextBox <TextBox
x:Name="txtRemarks" x:Name="txtRemarks"
@@ -31,39 +31,39 @@
Grid.Column="1" Grid.Column="1"
Width="200" Width="200"
HorizontalAlignment="Left" HorizontalAlignment="Left"
Classes="Margin8" /> Margin="{StaticResource Margin4}" />
<ToggleSwitch <ToggleSwitch
x:Name="togEnabled" x:Name="togEnabled"
Grid.Row="0" Grid.Row="0"
Grid.Column="2" Grid.Column="2"
HorizontalAlignment="Left" HorizontalAlignment="Left"
Classes="Margin8" /> Margin="{StaticResource Margin4}" />
<TextBlock <TextBlock
Grid.Row="1" Grid.Row="1"
Grid.Column="0" Grid.Column="0"
VerticalAlignment="Center" VerticalAlignment="Center"
Classes="Margin8" Margin="{StaticResource Margin4}"
Text="outboundTag" /> Text="outboundTag" />
<ComboBox <ComboBox
x:Name="cmbOutboundTag" x:Name="cmbOutboundTag"
Grid.Row="1" Grid.Row="1"
Grid.Column="1" Grid.Column="1"
Width="200" Width="200"
Classes="Margin8" Margin="{StaticResource Margin4}"
MaxDropDownHeight="1000" /> MaxDropDownHeight="1000" />
<TextBlock <TextBlock
Grid.Row="1" Grid.Row="1"
Grid.Column="2" Grid.Column="2"
HorizontalAlignment="Left" HorizontalAlignment="Left"
Classes="Margin8" Margin="{StaticResource Margin4}"
Text="{x:Static resx:ResUI.TbRuleMatchingTips}" /> Text="{x:Static resx:ResUI.TbRuleMatchingTips}" />
<TextBlock <TextBlock
Grid.Row="2" Grid.Row="2"
Grid.Column="0" Grid.Column="0"
VerticalAlignment="Center" VerticalAlignment="Center"
Classes="Margin8" Margin="{StaticResource Margin4}"
Text="port" /> Text="port" />
<TextBox <TextBox
x:Name="txtPort" x:Name="txtPort"
@@ -71,12 +71,12 @@
Grid.Column="1" Grid.Column="1"
Width="200" Width="200"
HorizontalAlignment="Left" HorizontalAlignment="Left"
Classes="Margin8" /> Margin="{StaticResource Margin4}" />
<TextBlock <TextBlock
Grid.Row="2" Grid.Row="2"
Grid.Column="2" Grid.Column="2"
VerticalAlignment="Center" VerticalAlignment="Center"
Classes="Margin8"> Margin="{StaticResource Margin4}">
<HyperlinkButton Classes="WithIcon" Click="linkRuleobjectDoc_Click"> <HyperlinkButton Classes="WithIcon" Click="linkRuleobjectDoc_Click">
<TextBlock Text="{x:Static resx:ResUI.TbRuleobjectDoc}" /> <TextBlock Text="{x:Static resx:ResUI.TbRuleobjectDoc}" />
</HyperlinkButton> </HyperlinkButton>
@@ -86,14 +86,14 @@
Grid.Row="3" Grid.Row="3"
Grid.Column="0" Grid.Column="0"
VerticalAlignment="Center" VerticalAlignment="Center"
Classes="Margin8" Margin="{StaticResource Margin4}"
Text="protocol" /> Text="protocol" />
<ListBox <ListBox
x:Name="clbProtocol" x:Name="clbProtocol"
Grid.Row="3" Grid.Row="3"
Grid.Column="1" Grid.Column="1"
HorizontalAlignment="Left" HorizontalAlignment="Left"
Classes="Margin8" Margin="{StaticResource Margin4}"
SelectionMode="Multiple,Toggle" SelectionMode="Multiple,Toggle"
Theme="{DynamicResource CardCheckGroupListBox}" /> Theme="{DynamicResource CardCheckGroupListBox}" />
@@ -101,20 +101,20 @@
Grid.Row="4" Grid.Row="4"
Grid.Column="0" Grid.Column="0"
VerticalAlignment="Center" VerticalAlignment="Center"
Classes="Margin8" Margin="{StaticResource Margin4}"
Text="inboundTag" /> Text="inboundTag" />
<ListBox <ListBox
x:Name="clbInboundTag" x:Name="clbInboundTag"
Grid.Row="4" Grid.Row="4"
Grid.Column="1" Grid.Column="1"
Classes="Margin8" Margin="{StaticResource Margin4}"
SelectionMode="Multiple,Toggle" SelectionMode="Multiple,Toggle"
Theme="{DynamicResource CardCheckGroupListBox}" /> Theme="{DynamicResource CardCheckGroupListBox}" />
<TextBlock <TextBlock
Grid.Row="4" Grid.Row="4"
Grid.Column="2" Grid.Column="2"
HorizontalAlignment="Left" HorizontalAlignment="Left"
Classes="Margin8" Margin="{StaticResource Margin4}"
Text="{x:Static resx:ResUI.TbRoutingInboundTagTips}" /> Text="{x:Static resx:ResUI.TbRoutingInboundTagTips}" />
@@ -122,26 +122,26 @@
Grid.Row="5" Grid.Row="5"
Grid.Column="0" Grid.Column="0"
VerticalAlignment="Center" VerticalAlignment="Center"
Classes="Margin8" Margin="{StaticResource Margin4}"
Text="network" /> Text="network" />
<ComboBox <ComboBox
x:Name="cmbNetwork" x:Name="cmbNetwork"
Grid.Row="5" Grid.Row="5"
Grid.Column="1" Grid.Column="1"
Width="200" Width="200"
Classes="Margin8" Margin="{StaticResource Margin4}"
MaxDropDownHeight="1000" /> MaxDropDownHeight="1000" />
<TextBlock <TextBlock
Grid.Row="5" Grid.Row="5"
Grid.Column="2" Grid.Column="2"
HorizontalAlignment="Left" HorizontalAlignment="Left"
Classes="Margin8" Margin="{StaticResource Margin4}"
Text="{x:Static resx:ResUI.TbRoutingTips}" /> Text="{x:Static resx:ResUI.TbRoutingTips}" />
</Grid> </Grid>
<StackPanel <StackPanel
HorizontalAlignment="Right" HorizontalAlignment="Right"
Classes="Margin8" Margin="{StaticResource Margin4}"
DockPanel.Dock="Bottom" DockPanel.Dock="Bottom"
Orientation="Horizontal"> Orientation="Horizontal">
<StackPanel <StackPanel
@@ -161,13 +161,13 @@
<Button <Button
x:Name="btnCancel" x:Name="btnCancel"
Width="100" Width="100"
Margin="8,0" Margin="{StaticResource MarginLr8}"
Content="{x:Static resx:ResUI.TbCancel}" Content="{x:Static resx:ResUI.TbCancel}"
Cursor="Hand" Cursor="Hand"
IsCancel="True" /> IsCancel="True" />
</StackPanel> </StackPanel>
<Grid Classes="Margin8" ColumnDefinitions="1*,10,1*,10,1*"> <Grid Margin="{StaticResource Margin4}" ColumnDefinitions="1*,10,1*,10,1*">
<HeaderedContentControl <HeaderedContentControl
Grid.Column="0" Grid.Column="0"
BorderBrush="Gray" BorderBrush="Gray"
@@ -208,4 +208,4 @@
</HeaderedContentControl> </HeaderedContentControl>
</Grid> </Grid>
</DockPanel> </DockPanel>
</Window> </Window>

View File

@@ -1,4 +1,4 @@
<Window <Window
x:Class="v2rayN.Desktop.Views.RoutingRuleSettingWindow" x:Class="v2rayN.Desktop.Views.RoutingRuleSettingWindow"
xmlns="https://github.com/avaloniaui" xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
@@ -15,7 +15,7 @@
mc:Ignorable="d"> mc:Ignorable="d">
<DockPanel> <DockPanel>
<StackPanel <StackPanel
Classes="Margin8" Margin="{StaticResource Margin4}"
DockPanel.Dock="Top" DockPanel.Dock="Top"
Orientation="Horizontal"> Orientation="Horizontal">
<Menu> <Menu>
@@ -28,7 +28,7 @@
<StackPanel <StackPanel
HorizontalAlignment="Right" HorizontalAlignment="Right"
Classes="Margin8" Margin="{StaticResource Margin4}"
DockPanel.Dock="Bottom" DockPanel.Dock="Bottom"
Orientation="Horizontal"> Orientation="Horizontal">
<Button <Button
@@ -40,14 +40,14 @@
<Button <Button
x:Name="btnCancel" x:Name="btnCancel"
Width="100" Width="100"
Margin="8,0" Margin="{StaticResource MarginLr8}"
Content="{x:Static resx:ResUI.TbCancel}" Content="{x:Static resx:ResUI.TbCancel}"
Cursor="Hand" Cursor="Hand"
IsCancel="True" /> IsCancel="True" />
</StackPanel> </StackPanel>
<Grid <Grid
Classes="Margin8" Margin="{StaticResource Margin4}"
ColumnDefinitions="Auto,Auto,Auto" ColumnDefinitions="Auto,Auto,Auto"
DockPanel.Dock="Top" DockPanel.Dock="Top"
RowDefinitions="Auto,Auto,Auto,Auto,Auto,Auto"> RowDefinitions="Auto,Auto,Auto,Auto,Auto,Auto">
@@ -55,7 +55,7 @@
Grid.Row="0" Grid.Row="0"
Grid.Column="0" Grid.Column="0"
VerticalAlignment="Center" VerticalAlignment="Center"
Classes="Margin8" Margin="{StaticResource Margin4}"
Text="{x:Static resx:ResUI.LvRemarks}" /> Text="{x:Static resx:ResUI.LvRemarks}" />
<StackPanel <StackPanel
Grid.Row="0" Grid.Row="0"
@@ -69,25 +69,25 @@
Width="300" Width="300"
HorizontalAlignment="Left" HorizontalAlignment="Left"
VerticalAlignment="Center" VerticalAlignment="Center"
Classes="Margin8" Margin="{StaticResource Margin4}"
TextWrapping="Wrap" /> TextWrapping="Wrap" />
<TextBlock <TextBlock
VerticalAlignment="Center" VerticalAlignment="Center"
Classes="Margin8" Margin="{StaticResource Margin4}"
Text="{x:Static resx:ResUI.LvSort}" /> Text="{x:Static resx:ResUI.LvSort}" />
<TextBox <TextBox
x:Name="txtSort" x:Name="txtSort"
Width="100" Width="100"
HorizontalAlignment="Left" HorizontalAlignment="Left"
Classes="Margin8" /> Margin="{StaticResource Margin4}" />
</StackPanel> </StackPanel>
<TextBlock <TextBlock
Grid.Row="1" Grid.Row="1"
Grid.Column="0" Grid.Column="0"
VerticalAlignment="Center" VerticalAlignment="Center"
Classes="Margin8" Margin="{StaticResource Margin4}"
Text="{x:Static resx:ResUI.TbdomainStrategy}" /> Text="{x:Static resx:ResUI.TbdomainStrategy}" />
<StackPanel <StackPanel
Grid.Row="1" Grid.Row="1"
@@ -96,22 +96,22 @@
<ComboBox <ComboBox
x:Name="cmbdomainStrategy" x:Name="cmbdomainStrategy"
Width="200" Width="200"
Classes="Margin8" /> Margin="{StaticResource Margin4}" />
<TextBlock <TextBlock
VerticalAlignment="Center" VerticalAlignment="Center"
Classes="Margin8" Margin="{StaticResource Margin4}"
Text="{x:Static resx:ResUI.TbdomainStrategy4Singbox}" /> Text="{x:Static resx:ResUI.TbdomainStrategy4Singbox}" />
<ComboBox <ComboBox
x:Name="cmbdomainStrategy4Singbox" x:Name="cmbdomainStrategy4Singbox"
Width="200" Width="200"
Classes="Margin8" /> Margin="{StaticResource Margin4}" />
</StackPanel> </StackPanel>
<TextBlock <TextBlock
Grid.Row="2" Grid.Row="2"
Grid.Column="0" Grid.Column="0"
VerticalAlignment="Center" VerticalAlignment="Center"
Classes="Margin8" Margin="{StaticResource Margin4}"
Text="{x:Static resx:ResUI.LvUrl}" /> Text="{x:Static resx:ResUI.LvUrl}" />
<TextBox <TextBox
x:Name="txtUrl" x:Name="txtUrl"
@@ -120,7 +120,7 @@
Width="600" Width="600"
HorizontalAlignment="Left" HorizontalAlignment="Left"
VerticalAlignment="Center" VerticalAlignment="Center"
Classes="Margin8" Margin="{StaticResource Margin4}"
TextWrapping="Wrap" /> TextWrapping="Wrap" />
<!-- <!--
@@ -128,7 +128,7 @@
Grid.Row="3" Grid.Row="3"
Grid.Column="0" Grid.Column="0"
VerticalAlignment="Center" VerticalAlignment="Center"
Classes="Margin8" Margin="{StaticResource Margin4}"
Text="{x:Static resx:ResUI.LvCustomIcon}" /> Text="{x:Static resx:ResUI.LvCustomIcon}" />
<TextBox <TextBox
x:Name="txtCustomIcon" x:Name="txtCustomIcon"
@@ -137,13 +137,13 @@
Width="600" Width="600"
HorizontalAlignment="Left" HorizontalAlignment="Left"
VerticalAlignment="Center" VerticalAlignment="Center"
Classes="Margin8" Margin="{StaticResource Margin4}"
TextWrapping="Wrap" /> TextWrapping="Wrap" />
<Button <Button
x:Name="btnBrowseCustomIcon" x:Name="btnBrowseCustomIcon"
Grid.Row="3" Grid.Row="3"
Grid.Column="2" Grid.Column="2"
Classes="Margin8" Margin="{StaticResource Margin4}"
Content="{x:Static resx:ResUI.TbBrowse}" /> Content="{x:Static resx:ResUI.TbBrowse}" />
--> -->
@@ -151,7 +151,7 @@
Grid.Row="4" Grid.Row="4"
Grid.Column="0" Grid.Column="0"
VerticalAlignment="Center" VerticalAlignment="Center"
Classes="Margin8"> Margin="{StaticResource Margin4}">
<HyperlinkButton Classes="WithIcon" Click="linkCustomRulesetPath4Singbox"> <HyperlinkButton Classes="WithIcon" Click="linkCustomRulesetPath4Singbox">
<TextBlock Text="{x:Static resx:ResUI.LvCustomRulesetPath4Singbox}" /> <TextBlock Text="{x:Static resx:ResUI.LvCustomRulesetPath4Singbox}" />
</HyperlinkButton> </HyperlinkButton>
@@ -163,13 +163,13 @@
Width="600" Width="600"
HorizontalAlignment="Left" HorizontalAlignment="Left"
VerticalAlignment="Center" VerticalAlignment="Center"
Classes="Margin8" Margin="{StaticResource Margin4}"
TextWrapping="Wrap" /> TextWrapping="Wrap" />
<Button <Button
x:Name="btnBrowseCustomRulesetPath4Singbox" x:Name="btnBrowseCustomRulesetPath4Singbox"
Grid.Row="4" Grid.Row="4"
Grid.Column="2" Grid.Column="2"
Classes="Margin8" Margin="{StaticResource Margin4}"
Content="{x:Static resx:ResUI.TbBrowse}" /> Content="{x:Static resx:ResUI.TbBrowse}" />
</Grid> </Grid>
@@ -242,4 +242,4 @@
</TabItem> </TabItem>
</TabControl> </TabControl>
</DockPanel> </DockPanel>
</Window> </Window>

View File

@@ -1,4 +1,4 @@
<Window <Window
x:Class="v2rayN.Desktop.Views.RoutingSettingWindow" x:Class="v2rayN.Desktop.Views.RoutingSettingWindow"
xmlns="https://github.com/avaloniaui" xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
@@ -16,7 +16,7 @@
<DockPanel> <DockPanel>
<StackPanel <StackPanel
Classes="Margin8" Margin="{StaticResource Margin4}"
DockPanel.Dock="Top" DockPanel.Dock="Top"
Orientation="Horizontal" Orientation="Horizontal"
Spacing="4"> Spacing="4">
@@ -45,7 +45,7 @@
<StackPanel <StackPanel
HorizontalAlignment="Right" HorizontalAlignment="Right"
Classes="Margin8" Margin="{StaticResource Margin4}"
DockPanel.Dock="Bottom" DockPanel.Dock="Bottom"
Orientation="Horizontal"> Orientation="Horizontal">
<StackPanel <StackPanel
@@ -63,7 +63,7 @@
<Button <Button
x:Name="btnCancel" x:Name="btnCancel"
Width="100" Width="100"
Margin="8,0" Margin="{StaticResource MarginLr8}"
Content="{x:Static resx:ResUI.TbCancel}" Content="{x:Static resx:ResUI.TbCancel}"
Cursor="Hand" Cursor="Hand"
IsCancel="True" /> IsCancel="True" />
@@ -123,4 +123,4 @@
</TabControl> </TabControl>
</DockPanel> </DockPanel>
</DockPanel> </DockPanel>
</Window> </Window>

View File

@@ -11,10 +11,10 @@
x:DataType="vms:StatusBarViewModel" x:DataType="vms:StatusBarViewModel"
mc:Ignorable="d"> mc:Ignorable="d">
<Grid> <Grid>
<DockPanel Margin="4"> <DockPanel Margin="{StaticResource Margin8}">
<StackPanel <StackPanel
Margin="8,0"
VerticalAlignment="Center" VerticalAlignment="Center"
Margin="{StaticResource MarginLr8}"
DockPanel.Dock="Right"> DockPanel.Dock="Right">
<TextBlock x:Name="txtSpeedProxyDisplay" HorizontalAlignment="Right" /> <TextBlock x:Name="txtSpeedProxyDisplay" HorizontalAlignment="Right" />
<Border Margin="1" /> <Border Margin="1" />
@@ -22,8 +22,8 @@
</StackPanel> </StackPanel>
<StackPanel <StackPanel
Margin="8,0"
VerticalAlignment="Center" VerticalAlignment="Center"
Margin="{StaticResource MarginLr8}"
DockPanel.Dock="Left"> DockPanel.Dock="Left">
<TextBlock x:Name="txtInboundDisplay" /> <TextBlock x:Name="txtInboundDisplay" />
<Border Margin="1" /> <Border Margin="1" />
@@ -32,50 +32,51 @@
<StackPanel <StackPanel
x:Name="spEnableTun" x:Name="spEnableTun"
Margin="8,0"
VerticalAlignment="Center" VerticalAlignment="Center"
Margin="{StaticResource MarginLr8}"
DockPanel.Dock="Left" DockPanel.Dock="Left"
Orientation="Horizontal"> Orientation="Horizontal">
<TextBlock <TextBlock
Margin="8,0"
VerticalAlignment="Center" VerticalAlignment="Center"
Margin="{StaticResource MarginLr8}"
Text="{x:Static resx:ResUI.TbEnableTunAs}" /> Text="{x:Static resx:ResUI.TbEnableTunAs}" />
<ToggleSwitch <ToggleSwitch
x:Name="togEnableTun" x:Name="togEnableTun"
HorizontalAlignment="Center" HorizontalAlignment="Center"
Classes="Margin8" Margin="{StaticResource Margin4}"
Theme="{DynamicResource SimpleToggleSwitch}" /> Theme="{DynamicResource SimpleToggleSwitch}" />
</StackPanel> </StackPanel>
<StackPanel <StackPanel
Margin="8,0"
VerticalAlignment="Center" VerticalAlignment="Center"
Margin="{StaticResource MarginLr8}"
DockPanel.Dock="Left" DockPanel.Dock="Left"
Orientation="Horizontal"> Orientation="Horizontal">
<ComboBox <ComboBox
x:Name="cmbSystemProxy" x:Name="cmbSystemProxy"
Width="160" Width="160"
Margin="8,0" Margin="{StaticResource MarginLr8}"
ToolTip.Tip="{x:Static resx:ResUI.menuSystemproxy}"> ToolTip.Tip="{x:Static resx:ResUI.menuSystemproxy}">
<ComboBoxItem Content="{x:Static resx:ResUI.menuSystemProxyClear}" /> <ComboBoxItem Content="{x:Static resx:ResUI.menuSystemProxyClear}" />
<ComboBoxItem Content="{x:Static resx:ResUI.menuSystemProxySet}" /> <ComboBoxItem Content="{x:Static resx:ResUI.menuSystemProxySet}" />
<ComboBoxItem Content="{x:Static resx:ResUI.menuSystemProxyNothing}" /> <ComboBoxItem Content="{x:Static resx:ResUI.menuSystemProxyNothing}" />
<ComboBoxItem Content="{x:Static resx:ResUI.menuSystemProxyPac}" />
</ComboBox> </ComboBox>
<ComboBox <ComboBox
x:Name="cmbRoutings2" x:Name="cmbRoutings2"
Width="160" Width="160"
Margin="8,0" Margin="{StaticResource MarginLr8}"
DisplayMemberBinding="{Binding Remarks}" DisplayMemberBinding="{Binding Remarks}"
ItemsSource="{Binding RoutingItems}" ItemsSource="{Binding RoutingItems}"
ToolTip.Tip="{x:Static resx:ResUI.menuRouting}" /> ToolTip.Tip="{x:Static resx:ResUI.menuRouting}" />
</StackPanel> </StackPanel>
<StackPanel Margin="8,0" VerticalAlignment="Center"> <StackPanel VerticalAlignment="Center" Margin="{StaticResource MarginLr8}">
<TextBlock x:Name="txtRunningServerDisplay" /> <TextBlock x:Name="txtRunningServerDisplay" />
<Border Margin="1" /> <Border Margin="1" />
<TextBlock x:Name="txtRunningInfoDisplay" /> <TextBlock x:Name="txtRunningInfoDisplay" />
</StackPanel> </StackPanel>
</DockPanel> </DockPanel>
</Grid> </Grid>
</UserControl> </UserControl>

View File

@@ -43,6 +43,11 @@ namespace v2rayN.Desktop.Views
}); });
//spEnableTun.IsVisible = (Utils.IsWindows() || AppHandler.Instance.IsAdministrator); //spEnableTun.IsVisible = (Utils.IsWindows() || AppHandler.Instance.IsAdministrator);
if (Utils.IsNonWindows() && cmbSystemProxy.Items.IsReadOnly == false)
{
cmbSystemProxy.Items.RemoveAt(cmbSystemProxy.Items.Count - 1);
}
} }
private async Task<bool> UpdateViewHandler(EViewAction action, object? obj) private async Task<bool> UpdateViewHandler(EViewAction action, object? obj)

View File

@@ -12,10 +12,10 @@
ShowInTaskbar="False" ShowInTaskbar="False"
WindowStartupLocation="CenterScreen" WindowStartupLocation="CenterScreen"
mc:Ignorable="d"> mc:Ignorable="d">
<DockPanel Classes="Margin8"> <DockPanel Margin="{StaticResource Margin8}">
<StackPanel <StackPanel
Margin="{StaticResource Margin4}"
HorizontalAlignment="Center" HorizontalAlignment="Center"
Classes="Margin8"
DockPanel.Dock="Bottom" DockPanel.Dock="Bottom"
Orientation="Horizontal"> Orientation="Horizontal">
<Button <Button
@@ -27,7 +27,7 @@
<Button <Button
x:Name="btnCancel" x:Name="btnCancel"
Width="100" Width="100"
Margin="8,0" Margin="{StaticResource MarginLr8}"
Content="{x:Static resx:ResUI.TbCancel}" Content="{x:Static resx:ResUI.TbCancel}"
Cursor="Hand" Cursor="Hand"
IsCancel="True" /> IsCancel="True" />
@@ -39,66 +39,63 @@
<TextBlock <TextBlock
Grid.Row="0" Grid.Row="0"
Grid.Column="0" Grid.Column="0"
Classes="Margin8" Margin="{StaticResource Margin4}"
Text="{x:Static resx:ResUI.menuSubscription}" /> Text="{x:Static resx:ResUI.menuSubscription}" />
<TextBlock <TextBlock
Grid.Row="1" Grid.Row="1"
Grid.Column="0" Grid.Column="0"
Margin="{StaticResource Margin4}"
VerticalAlignment="Center" VerticalAlignment="Center"
Classes="Margin8"
Text="{x:Static resx:ResUI.LvRemarks}" /> Text="{x:Static resx:ResUI.LvRemarks}" />
<TextBox <TextBox
x:Name="txtRemarks" x:Name="txtRemarks"
Grid.Row="1" Grid.Row="1"
Grid.Column="1" Grid.Column="1"
Margin="{StaticResource Margin4}"
VerticalAlignment="Center" VerticalAlignment="Center"
Classes="Margin8"
TextWrapping="Wrap" /> TextWrapping="Wrap" />
<TextBlock <TextBlock
Grid.Row="2" Grid.Row="2"
Grid.Column="0" Grid.Column="0"
Margin="{StaticResource Margin4}"
VerticalAlignment="Center" VerticalAlignment="Center"
Classes="Margin8"
Text="{x:Static resx:ResUI.LvUrl}" /> Text="{x:Static resx:ResUI.LvUrl}" />
<TextBox <TextBox
x:Name="txtUrl" x:Name="txtUrl"
Grid.Row="2" Grid.Row="2"
Grid.Column="1" Grid.Column="1"
Margin="{StaticResource Margin4}"
VerticalAlignment="Center" VerticalAlignment="Center"
Classes="Margin8"
TextWrapping="Wrap" TextWrapping="Wrap"
Watermark="{x:Static resx:ResUI.SubUrlTips}" /> Watermark="{x:Static resx:ResUI.SubUrlTips}" />
<Button <Button
Grid.Row="2" Grid.Row="2"
Grid.Column="2" Grid.Column="2"
Width="30" Width="{StaticResource IconButtonWidth}"
Height="30" Height="{StaticResource IconButtonHeight}"
Margin="10,0" Margin="{StaticResource MarginLr8}"
Theme="{DynamicResource BorderlessButton}"> Theme="{DynamicResource BorderlessButton}">
<Button.Content> <Button.Content>
<PathIcon <PathIcon Data="{StaticResource building_more}" Foreground="{DynamicResource ButtonDefaultTertiaryForeground}" />
Width="20"
Height="20"
Data="{StaticResource building_more}"
Foreground="{DynamicResource ButtonDefaultTertiaryForeground}" />
</Button.Content> </Button.Content>
<Button.Flyout> <Button.Flyout>
<Flyout> <Flyout>
<StackPanel> <StackPanel>
<TextBlock <TextBlock
Margin="{StaticResource Margin4}"
VerticalAlignment="Center" VerticalAlignment="Center"
Classes="Margin8"
Text="{x:Static resx:ResUI.LvMoreUrl}" /> Text="{x:Static resx:ResUI.LvMoreUrl}" />
<TextBox <TextBox
x:Name="txtMoreUrl" x:Name="txtMoreUrl"
Width="400" Width="400"
MinHeight="100" MinHeight="100"
Margin="{StaticResource Margin4}"
HorizontalAlignment="Stretch" HorizontalAlignment="Stretch"
VerticalAlignment="Center" VerticalAlignment="Center"
Classes="TextArea Margin8" Classes="TextArea"
MinLines="4" MinLines="4"
TextWrapping="Wrap" TextWrapping="Wrap"
Watermark="{x:Static resx:ResUI.SubUrlTips}" /> Watermark="{x:Static resx:ResUI.SubUrlTips}" />
@@ -110,150 +107,148 @@
<TextBlock <TextBlock
Grid.Row="3" Grid.Row="3"
Grid.Column="0" Grid.Column="0"
Margin="{StaticResource Margin4}"
VerticalAlignment="Center" VerticalAlignment="Center"
Classes="Margin8"
Text="{x:Static resx:ResUI.LvEnabled}" /> Text="{x:Static resx:ResUI.LvEnabled}" />
<DockPanel <DockPanel
Grid.Row="3" Grid.Row="3"
Grid.Column="1" Grid.Column="1"
Classes="Margin8"> Margin="{StaticResource Margin4}">
<ToggleSwitch <ToggleSwitch
x:Name="togEnable" x:Name="togEnable"
Margin="{StaticResource Margin4}"
HorizontalAlignment="Center" HorizontalAlignment="Center"
Classes="Margin8"
DockPanel.Dock="Left" /> DockPanel.Dock="Left" />
<TextBox <TextBox
x:Name="txtAutoUpdateInterval" x:Name="txtAutoUpdateInterval"
Width="100" Width="100"
Margin="{StaticResource Margin4}"
VerticalAlignment="Center" VerticalAlignment="Center"
Classes="Margin8"
DockPanel.Dock="Right" DockPanel.Dock="Right"
Watermark="{x:Static resx:ResUI.SubUrlTips}" /> Watermark="{x:Static resx:ResUI.SubUrlTips}" />
<TextBlock <TextBlock
Margin="{StaticResource Margin4}"
HorizontalAlignment="Center" HorizontalAlignment="Center"
VerticalAlignment="Center" VerticalAlignment="Center"
Classes="Margin8"
Text="{x:Static resx:ResUI.LvAutoUpdateInterval}" /> Text="{x:Static resx:ResUI.LvAutoUpdateInterval}" />
</DockPanel> </DockPanel>
<TextBlock <TextBlock
Grid.Row="5" Grid.Row="5"
Grid.Column="0" Grid.Column="0"
Margin="{StaticResource Margin4}"
VerticalAlignment="Center" VerticalAlignment="Center"
Classes="Margin8"
Text="{x:Static resx:ResUI.LvFilter}" /> Text="{x:Static resx:ResUI.LvFilter}" />
<TextBox <TextBox
x:Name="txtFilter" x:Name="txtFilter"
Grid.Row="5" Grid.Row="5"
Grid.Column="1" Grid.Column="1"
Margin="{StaticResource Margin4}"
VerticalAlignment="Center" VerticalAlignment="Center"
Classes="Margin8"
Watermark="{x:Static resx:ResUI.SubUrlTips}" /> Watermark="{x:Static resx:ResUI.SubUrlTips}" />
<TextBlock <TextBlock
Grid.Row="6" Grid.Row="6"
Grid.Column="0" Grid.Column="0"
Margin="{StaticResource Margin4}"
VerticalAlignment="Center" VerticalAlignment="Center"
Classes="Margin8"
Text="{x:Static resx:ResUI.LvConvertTarget}" /> Text="{x:Static resx:ResUI.LvConvertTarget}" />
<ComboBox <ComboBox
x:Name="cmbConvertTarget" x:Name="cmbConvertTarget"
Grid.Row="6" Grid.Row="6"
Grid.Column="1" Grid.Column="1"
Width="200" Width="200"
Classes="Margin8" Margin="{StaticResource Margin4}"
ToolTip.Tip="{x:Static resx:ResUI.LvConvertTargetTip}" /> ToolTip.Tip="{x:Static resx:ResUI.LvConvertTargetTip}" />
<TextBlock <TextBlock
Grid.Row="7" Grid.Row="7"
Grid.Column="0" Grid.Column="0"
Margin="{StaticResource Margin4}"
VerticalAlignment="Center" VerticalAlignment="Center"
Classes="Margin8"
Text="{x:Static resx:ResUI.LvUserAgent}" /> Text="{x:Static resx:ResUI.LvUserAgent}" />
<TextBox <TextBox
x:Name="txtUserAgent" x:Name="txtUserAgent"
Grid.Row="7" Grid.Row="7"
Grid.Column="1" Grid.Column="1"
Margin="{StaticResource Margin4}"
VerticalAlignment="Center" VerticalAlignment="Center"
Classes="Margin8"
TextWrapping="Wrap" TextWrapping="Wrap"
Watermark="{x:Static resx:ResUI.SubUrlTips}" /> Watermark="{x:Static resx:ResUI.SubUrlTips}" />
<TextBlock <TextBlock
Grid.Row="8" Grid.Row="8"
Grid.Column="0" Grid.Column="0"
Margin="{StaticResource Margin4}"
VerticalAlignment="Center" VerticalAlignment="Center"
Classes="Margin8"
Text="{x:Static resx:ResUI.LvSort}" /> Text="{x:Static resx:ResUI.LvSort}" />
<TextBox <TextBox
x:Name="txtSort" x:Name="txtSort"
Grid.Row="8" Grid.Row="8"
Grid.Column="1" Grid.Column="1"
Width="100" Width="100"
HorizontalAlignment="Left" Margin="{StaticResource Margin4}"
Classes="Margin8" /> HorizontalAlignment="Left" />
<TextBlock <TextBlock
Grid.Row="9" Grid.Row="9"
Grid.Column="0" Grid.Column="0"
Margin="{StaticResource Margin4}"
VerticalAlignment="Center" VerticalAlignment="Center"
Classes="Margin8"
Text="{x:Static resx:ResUI.LvPrevProfile}" /> Text="{x:Static resx:ResUI.LvPrevProfile}" />
<TextBox <TextBox
x:Name="txtPrevProfile" x:Name="txtPrevProfile"
Grid.Row="9" Grid.Row="9"
Grid.Column="1" Grid.Column="1"
Margin="{StaticResource Margin4}"
VerticalAlignment="Center" VerticalAlignment="Center"
Classes="Margin8"
Watermark="{x:Static resx:ResUI.LvPrevProfileTip}" /> Watermark="{x:Static resx:ResUI.LvPrevProfileTip}" />
<TextBlock <TextBlock
Grid.Row="10" Grid.Row="10"
Grid.Column="0" Grid.Column="0"
Margin="{StaticResource Margin4}"
VerticalAlignment="Center" VerticalAlignment="Center"
Classes="Margin8"
Text="{x:Static resx:ResUI.LvNextProfile}" /> Text="{x:Static resx:ResUI.LvNextProfile}" />
<TextBox <TextBox
x:Name="txtNextProfile" x:Name="txtNextProfile"
Grid.Row="10" Grid.Row="10"
Grid.Column="1" Grid.Column="1"
Margin="{StaticResource Margin4}"
VerticalAlignment="Center" VerticalAlignment="Center"
Classes="Margin8"
Watermark="{x:Static resx:ResUI.LvPrevProfileTip}" /> Watermark="{x:Static resx:ResUI.LvPrevProfileTip}" />
<TextBlock <TextBlock
Grid.Row="11" Grid.Row="11"
Grid.Column="0" Grid.Column="0"
Margin="4" Margin="{StaticResource Margin4}"
VerticalAlignment="Center" VerticalAlignment="Center"
Classes="Margin8"
Text="{x:Static resx:ResUI.TbPreSocksPort4Sub}" /> Text="{x:Static resx:ResUI.TbPreSocksPort4Sub}" />
<TextBox <TextBox
x:Name="txtPreSocksPort" x:Name="txtPreSocksPort"
Grid.Row="11" Grid.Row="11"
Grid.Column="1" Grid.Column="1"
Width="200" Width="200"
Margin="4" Margin="{StaticResource Margin4}"
HorizontalAlignment="Left" HorizontalAlignment="Left"
Classes="Margin8"
ToolTip.Tip="{x:Static resx:ResUI.TipPreSocksPort}" ToolTip.Tip="{x:Static resx:ResUI.TipPreSocksPort}"
Watermark="{x:Static resx:ResUI.TipPreSocksPort}" /> Watermark="{x:Static resx:ResUI.TipPreSocksPort}" />
<TextBlock <TextBlock
Grid.Row="12" Grid.Row="12"
Grid.Column="0" Grid.Column="0"
Margin="{StaticResource Margin4}"
VerticalAlignment="Center" VerticalAlignment="Center"
Classes="Margin8"
Text="{x:Static resx:ResUI.LvMemo}" /> Text="{x:Static resx:ResUI.LvMemo}" />
<TextBox <TextBox
x:Name="txtMemo" x:Name="txtMemo"
Grid.Row="12" Grid.Row="12"
Grid.Column="1" Grid.Column="1"
Margin="{StaticResource Margin4}"
VerticalAlignment="Center" VerticalAlignment="Center"
Classes="Margin8"
TextWrapping="Wrap" /> TextWrapping="Wrap" />
</Grid> </Grid>

View File

@@ -1,4 +1,4 @@
<Window <Window
x:Class="v2rayN.Desktop.Views.SubSettingWindow" x:Class="v2rayN.Desktop.Views.SubSettingWindow"
xmlns="https://github.com/avaloniaui" xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
@@ -19,9 +19,9 @@
CloseOnClickAway="True" CloseOnClickAway="True"
DisableOpeningAnimation="True" DisableOpeningAnimation="True"
Identifier="dialogHostSub"> Identifier="dialogHostSub">
<DockPanel Classes="Margin8"> <DockPanel Margin="{StaticResource Margin8}">
<StackPanel <StackPanel
Classes="Margin8" Margin="{StaticResource Margin4}"
DockPanel.Dock="Top" DockPanel.Dock="Top"
Orientation="Horizontal"> Orientation="Horizontal">
<Menu> <Menu>

View File

@@ -1,4 +1,4 @@
<UserControl <UserControl
x:Class="v2rayN.Desktop.Views.ThemeSettingView" x:Class="v2rayN.Desktop.Views.ThemeSettingView"
xmlns="https://github.com/avaloniaui" xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
@@ -20,52 +20,48 @@
</UserControl.Styles> </UserControl.Styles>
<Button <Button
Width="30" Width="{StaticResource IconButtonWidth}"
Height="30" Height="{StaticResource IconButtonHeight}"
Margin="10,0" Margin="{StaticResource MarginLr8}"
Theme="{DynamicResource BorderlessButton}"> Theme="{DynamicResource BorderlessButton}">
<Button.Content> <Button.Content>
<PathIcon <PathIcon Data="{StaticResource building_more}" Foreground="{DynamicResource ButtonDefaultTertiaryForeground}" />
Width="20"
Height="20"
Data="{StaticResource building_more}"
Foreground="{DynamicResource ButtonDefaultTertiaryForeground}" />
</Button.Content> </Button.Content>
<Button.Flyout> <Button.Flyout>
<Flyout> <Flyout>
<StackPanel Margin="0,12"> <StackPanel Margin="{StaticResource MarginTb8}">
<StackPanel Orientation="Horizontal"> <StackPanel Orientation="Horizontal">
<TextBlock <TextBlock
Margin="{StaticResource Margin4}"
VerticalAlignment="Center" VerticalAlignment="Center"
Classes="Margin8"
Text="{x:Static resx:ResUI.TbSettingsTheme}" /> Text="{x:Static resx:ResUI.TbSettingsTheme}" />
<ComboBox <ComboBox
x:Name="cmbCurrentTheme" x:Name="cmbCurrentTheme"
HorizontalAlignment="Center" Margin="{StaticResource Margin4}"
Classes="Margin8" /> HorizontalAlignment="Center" />
</StackPanel> </StackPanel>
<StackPanel Orientation="Horizontal"> <StackPanel Orientation="Horizontal">
<TextBlock <TextBlock
Margin="{StaticResource Margin4}"
VerticalAlignment="Center" VerticalAlignment="Center"
Classes="Margin8"
Text="{x:Static resx:ResUI.TbSettingsFontSize}" /> Text="{x:Static resx:ResUI.TbSettingsFontSize}" />
<ComboBox <ComboBox
x:Name="cmbCurrentFontSize" x:Name="cmbCurrentFontSize"
HorizontalAlignment="Center" Margin="{StaticResource Margin4}"
Classes="Margin8" /> HorizontalAlignment="Center" />
</StackPanel> </StackPanel>
<StackPanel Orientation="Horizontal"> <StackPanel Orientation="Horizontal">
<TextBlock <TextBlock
Margin="{StaticResource Margin4}"
VerticalAlignment="Center" VerticalAlignment="Center"
Classes="Margin8"
Text="{x:Static resx:ResUI.TbSettingsLanguage}" /> Text="{x:Static resx:ResUI.TbSettingsLanguage}" />
<ComboBox <ComboBox
x:Name="cmbCurrentLanguage" x:Name="cmbCurrentLanguage"
HorizontalAlignment="Center" Margin="{StaticResource Margin4}"
Classes="Margin8" /> HorizontalAlignment="Center" />
</StackPanel> </StackPanel>
</StackPanel> </StackPanel>
</Flyout> </Flyout>
</Button.Flyout> </Button.Flyout>
</Button> </Button>
</UserControl> </UserControl>

View File

@@ -764,7 +764,7 @@
x:Name="cmbcurrentFontFamily" x:Name="cmbcurrentFontFamily"
Grid.Row="15" Grid.Row="15"
Grid.Column="1" Grid.Column="1"
Width="200" Width="300"
Margin="{StaticResource Margin8}" Margin="{StaticResource Margin8}"
MaxDropDownHeight="1000" MaxDropDownHeight="1000"
Style="{StaticResource DefComboBox}" /> Style="{StaticResource DefComboBox}" />
@@ -867,7 +867,7 @@
x:Name="cmbMainGirdOrientation" x:Name="cmbMainGirdOrientation"
Grid.Row="21" Grid.Row="21"
Grid.Column="1" Grid.Column="1"
Width="300" Width="200"
Margin="{StaticResource Margin8}" Margin="{StaticResource Margin8}"
Style="{StaticResource DefComboBox}" /> Style="{StaticResource DefComboBox}" />

View File

@@ -353,9 +353,9 @@ namespace v2rayN.Views
private void StorageUI(string? n = null) private void StorageUI(string? n = null)
{ {
List<ColumnItem> lvColumnItem = new(); List<ColumnItem> lvColumnItem = new();
for (int k = 0; k < lstProfiles.Columns.Count; k++) foreach (var t in lstProfiles.Columns)
{ {
var item2 = (MyDGTextColumn)lstProfiles.Columns[k]; var item2 = (MyDGTextColumn)t;
lvColumnItem.Add(new() lvColumnItem.Add(new()
{ {
Name = item2.ExName, Name = item2.ExName,

View File

@@ -32,8 +32,8 @@ namespace v2rayN.Views
this.OneWayBind(ViewModel, vm => vm.BlSystemProxyPac, v => v.menuSystemProxyPac2.Visibility, conversionHint: BooleanToVisibilityHint.UseHidden, vmToViewConverterOverride: new BooleanToVisibilityTypeConverter()).DisposeWith(disposables); this.OneWayBind(ViewModel, vm => vm.BlSystemProxyPac, v => v.menuSystemProxyPac2.Visibility, conversionHint: BooleanToVisibilityHint.UseHidden, vmToViewConverterOverride: new BooleanToVisibilityTypeConverter()).DisposeWith(disposables);
this.BindCommand(ViewModel, vm => vm.SystemProxyClearCmd, v => v.menuSystemProxyClear).DisposeWith(disposables); this.BindCommand(ViewModel, vm => vm.SystemProxyClearCmd, v => v.menuSystemProxyClear).DisposeWith(disposables);
this.BindCommand(ViewModel, vm => vm.SystemProxySetCmd, v => v.menuSystemProxySet).DisposeWith(disposables); this.BindCommand(ViewModel, vm => vm.SystemProxySetCmd, v => v.menuSystemProxySet).DisposeWith(disposables);
this.BindCommand(ViewModel, vm => vm.SystemProxyPacCmd, v => v.menuSystemProxyPac).DisposeWith(disposables);
this.BindCommand(ViewModel, vm => vm.SystemProxyNothingCmd, v => v.menuSystemProxyNothing).DisposeWith(disposables); this.BindCommand(ViewModel, vm => vm.SystemProxyNothingCmd, v => v.menuSystemProxyNothing).DisposeWith(disposables);
this.BindCommand(ViewModel, vm => vm.SystemProxyPacCmd, v => v.menuSystemProxyPac).DisposeWith(disposables);
//routings and servers //routings and servers
this.OneWayBind(ViewModel, vm => vm.RoutingItems, v => v.cmbRoutings.ItemsSource).DisposeWith(disposables); this.OneWayBind(ViewModel, vm => vm.RoutingItems, v => v.cmbRoutings.ItemsSource).DisposeWith(disposables);