【问题标题】:Scale an entire WPF window缩放整个 WPF 窗口
【发布时间】:2011-02-16 21:34:20
【问题描述】:

我有一个 WPF 应用程序,我将在大型高分辨率投影仪上向观众演示,我担心该应用程序太小而无法从远处看到。

有没有一种简单的方法可以使整个应用程序更大(例如 WPF 设计器中的缩放滑块,可以让您放大?)我尝试在 XAML 中向窗口添加布局转换,如下所示:

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

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

我认为 WPF 的“分辨率独立”、高科技文本渲染、矢量图形等应该很简单。

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

【问题讨论】:

  • 我认为您可能想要RenderTransform 而不是LayoutTransform
  • @Gabe: RenderTransform 不允许在 Window 上使用(引发 XamlParseException)。而且我真的很想做一个LayoutTransform,因为我希望控件都更大,并且相互推动更大(例如Grids需要增长,StackPanels需要增长)。我知道LayoutTransforms 速度较慢,但​​这是一个业务线应用程序,其中动画很少,性能并不重要。
  • 我同意加布的观点。可以从主窗口缩放整个 ui 窗口

标签: .net wpf resolution-independence


【解决方案1】:

刚刚意识到将转换放在顶级控件(在我的例子中是Grid)而不是窗口本身上具有类似的影响我正在寻找的东西。唯一的区别是窗口大小没有改变,所以一切看起来都有些局促,但通过加大窗口很容易解决这个问题。

【讨论】:

  • 这是最简单的方法。谢谢
  • 旧帖子,但 Window-Property SizeToContent 能否帮助“拥挤的视图”。应始终将窗口大小调整为实际内容大小。
【解决方案2】:

我发布了一个相当详细的缩放主元素in another question 的示例。也许它对你有一些用处。

【讨论】:

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

使用ViewBox 将是使整个应用程序变大的最简单方法,甚至是字体大小。 Here你可以找到一些关于 ViewBox 的讨论。

【讨论】:

  • 人们总是忘记 ViewBox。它解决了很多问题!
【解决方案4】:

工作解决方案

至少在 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>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-12-24
    • 1970-01-01
    • 2017-09-14
    • 2014-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多