有什么方法可以使WPF应用程序在每个系统规模上都具有相同的大小?
当我在全高清屏幕上将Windows系统设置中的更改文本,应用程序和其他项目的大小从125%(推荐)更改为100%时,我的WPF应用程序变得太小。为了实现独立的系统规模的应用程序,我编写了这样的函数将应用程序的缩放比例更改回125%:
private void ScaleTo125Percents()
{
// Change scale of window content
MainContainer.LayoutTransform = new ScaleTransform(1.25, 1.25, 0, 0);
Width *= 1.25;
Height *= 1.25;
// Bring window center screen
var screenHeight = System.Windows.SystemParameters.PrimaryScreenHeight;
var screenWidth = System.Windows.SystemParameters.PrimaryScreenWidth;
Top = ( screenHeight - Height ) / 2;
Left = ( screenWidth - Width ) / 2;
}
Run Code Online (Sandbox Code Playgroud)
但是有条件可以调用此函数。屏幕的第一个必须为Full-HD(有API可以检查此内容),并且系统比例必须为100%(没有.NET API可以获取系统比例)。
我能做什么?我是否正在使用标准方法来使我的应用程序系统独立于规模?
我见过与规模无关的应用程序的示例:
我有一个已打包的 WPF 应用程序,以便能够在 Microsoft Store 中提交它。我使用StartupTask 扩展在系统启动时运行它。
Package.appmanifest(在解决方案的Package项目中):
<Extensions>
<uap5:Extension Category="windows.startupTask" Executable="*PathToExecutable*" EntryPoint="Windows.FullTrustApplication">
<uap5:StartupTask TaskId="MyAppStartupTaskId" Enabled="true" DisplayName="Title in TaskManager" />
</uap5:Extension>
</Extensions>
Run Code Online (Sandbox Code Playgroud)
问题是启动运行时没有Argument可设置的属性,如下所示:
<uap5:StartupTask Argument="/autostart" ... />
Run Code Online (Sandbox Code Playgroud)
然后我可以在事件中做这样的事情Application_Startup:
App.xaml.cs(在解决方案的Application项目中):
private void Application_Startup(object sender, StartupEventArgs e)
{
// Check if application is running by startup
if (e.Args.Length > 0 && e.Args[0] == "/autostart")
{
LaunchMinimized = true;
}
// Lots of bla bla blas here...
}
Run Code Online (Sandbox Code Playgroud)
问题是我可以用这个StartupTask东西检查WPF应用程序中的程序是否随系统启动而启动吗?系统启动启动器是否将任何事件或属性附加到我的应用程序或其启动参数以检查启动情况?
已编辑
我有一个ASP.NET Core 2.1网站,我已将其所有Identity项目都放置在脚手架中。脚手架过程在以下位置创建了一个布局文件:
/Areas/Identity/Pages/Account/Manage/_Layout.cshtml
当我想全局使用布局时,我已经将布局文件(带有剪切粘贴)移动到了这个新位置:
/Views/Shared/AdminLayout/_Layout.cshtml
然后_ViewStart.cshtml在第一个位置创建一个文件,以在第二个位置使用布局。_ViewStart文件的内容是这样的:
@{
Layout = "/Views/Shared/AdminLayout/_Layout.cshtml";
ViewData["ThisOneWorks"] = "some value";
}
Run Code Online (Sandbox Code Playgroud)
现在的问题是,ViewDatas表示我从脚手架页面(例如设置SetPassword.cshtml,ExtenalLogins.cshtml...)未在布局文件的工作。例如ViewData["Title"],始终为空,但是ViewData我在中设置的_ViewStart正在运行。
问题是,ViewData当我使用共享视图文件夹中的布局时,如何使用支架式身份文件?
编辑1:
似乎问题出在这一行:
ViewData["ThisOneWorks"] = "some value";
Run Code Online (Sandbox Code Playgroud)
当我从中删除它时_ViewStart,所有其他都ViewData可以正常工作,但是为什么呢?
该公共选项在创建项目页面的可视性部分禁用.当我将鼠标移到公共选项的信息图标上时,它表示:您的企业阻止您选择此选项.
据我所知,Enterprise在VSTS中意味着当前选择的帐户,每个企业可以包含许多组织.
我当前选择的企业是Microsoft帐户,我无法在我的Microsoft帐户的任何组织中创建任何公共项目.
从Microsoft帐户创建公共项目有什么问题?如何创建一个?
我定义了像这样的await函数:
let await (task : Task<'a>) =
task |> Async.AwaitTask |> Async.RunSynchronously
Run Code Online (Sandbox Code Playgroud)
和这样的两个任务:
let stringTask = new Task<string>(fun () -> "something")
let unitTask = new Task(fun () -> printf "something")
Run Code Online (Sandbox Code Playgroud)
像这样打电话给他们:
let stringResult = await stringTask
await unitTask
Run Code Online (Sandbox Code Playgroud)
但第二个不是通用的,我无法调用await它,因此我编辑了函数参数,如下所示:
let await (task : Task) =
task |> Async.AwaitTask |> Async.RunSynchronously
Run Code Online (Sandbox Code Playgroud)
问题是现在await stringTask正在返回unit而不是string.
我应该如何编写await函数来接受Task <'a>和Task作为参数并等待它?
c# ×3
wpf ×2
asp.net ×1
asp.net-core ×1
asp.net-mvc ×1
azure-devops ×1
dpi ×1
f# ×1
razor-pages ×1
scale ×1
startup ×1
uwp ×1