2009-07-11 44 views

回答

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中,您无法在设计器中看到Viewbox的内容。

希望得到这个帮助。

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> 
+0

哦不,我希望这是我的问题... 我希望内容能够缩放到窗口大小。 – 2009-07-11 20:23:00

+0

我没有与编辑合作... 你不明白我,我想内容增长...不扩散.. – 2009-07-13 19:13:24

+0

你将不得不编辑你的问题,我认为。你的意思是你真的想要每一个细节都放大,字体大小呢? – 2009-07-13 19:24:36

2

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

1

如果要将所有内容都缩放到窗口大小,只需将所有内容放入Viewbox控件中。