调整内容大小以适应屏幕分辨率

时间:2009-07-11 18:44:35

标签: wpf

你好我有一个带标签和文本框的窗口(wpf),我希望他尽可能地适应屏幕分辨率, 我该怎么做

5 个答案:

答案 0 :(得分:25)

如果您需要在调整窗口大小时按比例缩放窗口内容(例如最大化窗口),Viewbox非常有用。在这个简约的页面中

<Window x:Class="WpfApplication1.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="Window1" Height="300" Width="300">
    <Viewbox>
        <StackPanel>
            <TextBlock FontSize="14">Example</TextBlock>
            <Border Background="Aqua" Width="100" Height="100"></Border>                    
        </StackPanel>
    </Viewbox>
</Window>

你有一个TextBlock和一个垂直堆叠的彩色边框;如果你启动这个xaml,窗口的大小将为300x300,TextBlock的字体大小为14,彩色边框的大小为100x100。如果您重新缩放窗口,您将相应地看到TextBlock和Border缩放(因此它们将不再是您在xaml中指定的大小),保持相对比例。在这方面,Viewbox非常有用,如果你需要一个窗口,其内部组件布局看起来总是独立于它将显示的最终分辨率(重要的是宽高比,思考)。这显然适用于你放在Viewbox中的任何内容(我们有一个带有视频和3D视图的应用程序)。请注意,在Visual Studio 2008中,您将无法在Designer中看到Viewbox的内容。

希望得到这个帮助。

答案 1 :(得分:2)

如果你想真正扩展所有内容,包括字体大小,你可以对你的内容应用缩放变换,并将它的X和Y值绑定到窗口的宽度和高度。然后,您还需要一个值转换器来将它们转换为适当的比例。

答案 2 :(得分:1)

如果要将所有内容扩展到窗口大小,只需将所有内容放在Viewbox控件中即可。

答案 3 :(得分:0)

你的意思是你想让窗户填满整个屏幕吗?最简单的方法(不会引起进一步的麻烦)是最大化窗口。

w.WindowState = WindowState.Maximized;

编辑:

可伸缩窗口布局要求您避免在Visual Studio中使用XAML编辑器!实际上你可以在编辑器中做到这一点,但这很难。

手动编写XAML要容易得多:

<Grid>
    <Grid.RowDefinitions>
        <RowDefinition/>
        <RowDefinition/>
    </Grid.RowDefinitions>
    <Grid.ColumnDefinitions>
        <ColumnDefinition/>
        <ColumnDefinition/>
    </Grid.ColumnDefinitions>

    <Label Grid.Column="0" Grid.Row="0">First Name</Label>
    <TextBox Grid.Column="1" Grid.Row="0" Name="firstName">Fred</TextBox>
    <Label Grid.Column="0" Grid.Row="1">First Name</Label>
    <TextBox Grid.Column="1" Grid.Row="1" Name="lastName">Smith</TextBox>
</Grid>

这将适合窗口的大小,但可能看起来很奇怪,因为行和列默认会占用每个空间的一半。您可以覆盖它,以便它们的高度由其内容决定:

<RowDefinition Height="Auto"/>

它还可以帮助将边距放在某些控件上,以便将它们分开:

<TextBox Grid.Column="1" Grid.Row="1" Margin="6" Name="lastName">Smith</TextBox>

答案 4 :(得分:0)

WindowState =“ Maximized” 添加到窗口

<Window x:Class="WpfApplication1.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="Window1" Height="300" Width="300" WindowState="Maximized" >

</Window>