开发者

Scale an entire WPF window

I have a WPF application that I am going to be demoing to an audience on a large, high-resolution projector, and I am worried that the application will be too small to see from afar.

Is there a simple way to make the ENTIRE applicat开发者_运维问答ion bigger (like the zoom slider in the WPF designer, that lets you zoom in?) I tried adding a layout transform to the Window in XAML, like so:

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

which makes the window look bigger in the designer, but seems to have no effect on the running application.

I figure this should be dead simple with WPF's "resolution independence", high-tech text rendering, vector graphics, etc.

(I know I can use a screen zooming tool, but that's lame since it makes everything fuzzy, and always makes me dizzy when the presenter pans around the screen.)


Just realized that putting the transform on the top-level control (a Grid, in my case), instead of on the window itself, has a similar effect to what I was looking for. The only difference is that the window size doesn't change so everything looks a little cramped, but that is easily remedied by making the window larger.


I posted a fairly detailed example of scaling the main element in another question. Perhaps it would be of some use to you.


Using ViewBox would be the simplest way to make an entire application bigger, even the font size. Here you can find some discussion about ViewBox.


Working Solution

At least in WPF .NET Core 3.1 Window supports SizeToContent="WidthAndHeight", it may work with older versions also as this property is supported since .NET Framework 3.0.
Combined with a fixed width/height of the content control and a ScaleTransform set on LayoutTransform, it scales the entire window.

Recipe

  • Window
    • SizeToContent: WidthAndHeight
  • Content
    • Fixed size
    • LayoutTransform: your custom ScaleTransform

Note

Setting SizeToContent by a style doesn't work (seems too late in the process).

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

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜