缩放整个WPF窗口

26

我有一个WPF应用程序,将在大型高分辨率投影仪上展示给观众,我担心应用程序在远处看起来太小。

是否有一种简单的方法可以使整个应用程序变大(类似于WPF设计师中的缩放滑块,可以让您缩放?)我尝试在XAML中为窗口添加布局变换,如下所示:

<Window.LayoutTransform>
    <ScaleTransform ScaleX="1.5" ScaleY="1.5" CenterX=".5" CenterY=".5" />
</Window.LayoutTransform>

这会使窗口在设计时看起来更大,但似乎对运行的应用程序没有影响。

我觉得使用WPF的“分辨率独立性”,高科技文本渲染,矢量图形等功能应该很简单。

(我知道我可以使用屏幕缩放工具,但这很糟糕,因为它会使所有东西变得模糊,并且当演示者在屏幕上移动时,总是让我头晕。)


我认为你可能需要使用RenderTransform而不是LayoutTransform - Gabe
@Gabe:在 Window 上不允许使用 RenderTransform(会抛出 XamlParseException)。但是我还是想使用 LayoutTransform,因为我希望控件都变大,并且相互推动变大(例如,Grids需要增大,StackPanels也需要增大)。我知道 LayoutTransform 的速度较慢,但这是一款商业应用程序,其中很少有动画效果,性能并不关键。 - Hank
我同意Gabe的观点。整个UI窗口可以从主窗口进行缩放。 - pollaris
4个回答

13

我刚意识到,将变换应用于顶级控件(在我的例子中是一个Grid),而不是应用于窗口本身,可以产生类似我想要的效果。唯一的区别是窗口尺寸不会改变,所以所有内容看起来有些拥挤,但是这可以通过扩大窗口轻松解决。


这是最简单的方法。谢谢。 - FLICKER
1
这是一篇旧帖子,但是 Window-Property SizeToContent 属性能否帮助解决“拥挤视图”问题。它应该始终将窗口调整为实际内容大小。 - dba

9

这基本上归结为将LayoutTransform放在顶层网格上,但您已经做了更多的工作,使其在运行时可调整。我想要的只是一个快速的东西,可以以更高的大小编译,但这是一个更好的通用解决方案。 - Hank

5

可行的解决方案

至少在 WPF .NET Core 3.1 中,Window 支持 SizeToContent="WidthAndHeight",这个属性从 .NET Framework 3.0 就开始支持了,旧版本中也可能适用。
结合内容控件的固定宽高和设置在 LayoutTransform 上的 ScaleTransform,可以缩放整个窗口

步骤

  • 窗口
    • SizeToContent: WidthAndHeight
  • 内容
    • 固定大小
    • LayoutTransform:您自定义的 ScaleTransform

注意

通过样式设置 SizeToContent 不起作用(似乎过程中太晚了)。

示例 XAML

<Window x:Class="Some.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:Some"
        mc:Ignorable="d"
        Title="MainWindow" 
        SizeToContent="WidthAndHeight"
        >
    <Window.Resources>
        <ResourceDictionary>
            <ScaleTransform x:Key="windowScaleTransform" ScaleX="0.5" ScaleY="0.5" />
        </ResourceDictionary>
    </Window.Resources>

    <Grid Width="1080" 
          Height="1920" 
          LayoutTransform="{StaticResource windowScaleTransform}"
          >
        <TextBlock>This window is scaled to 50%!</TextBlock>        
    </Frame>
</Window>


它可以工作,Sizetocontent的效果不如预期,所以我重置了窗口的大小。 - sync

5

使用视图框(ViewBox)是使整个应用程序变大,甚至包括字体大小的最简单方法。在这里,您可以找到一些关于视图框的讨论。


1
人们总是忘记了ViewBox。它解决了很多问题! - DonkeyMaster

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接