2016-06-10 7 views
1

我在WPF中有以下XAML代码。这产生与列的相同大小的网格&行(如图1)如何在XAML中改变窗口大小时使内容具有相同的空间(宽度和高度)来调整大小?

<Grid> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="1*"/> 
     <RowDefinition Height="1*"/> 
     <RowDefinition Height="1*"/> 
     <RowDefinition Height="1*"/> 
    </Grid.RowDefinitions> 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition Width="1*"/> 
     <ColumnDefinition Width="1*"/> 
     <ColumnDefinition Width="1*"/> 
     <ColumnDefinition Width="1*"/> 
    </Grid.ColumnDefinitions> 

    <TextBlock Grid.Row="0" Grid.Column="0" Text="A" Background="Green"/> 
    <TextBlock Grid.Row="1" Grid.Column="1" Text="AB" Background="Red"/> 
    <TextBlock Grid.Row="2" Grid.Column="2" Text="ABC" Background="Blue"/> 
    <TextBlock Grid.Row="3" Grid.Column="3" Text="ABCD" Background="Yellow"/> 
</Grid> 

图1.

Figure 1.

但是,当我把这个网格在一个视框(如代码如下),行&列的大小保持不变(如图2所示)。

<Viewbox Stretch="Uniform"> 
    <Grid> 
     <Grid.RowDefinitions> 
      <RowDefinition Height="1*"/> 
      <RowDefinition Height="1*"/> 
      <RowDefinition Height="1*"/> 
      <RowDefinition Height="1*"/> 
     </Grid.RowDefinitions> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition Width="1*"/> 
      <ColumnDefinition Width="1*"/> 
      <ColumnDefinition Width="1*"/> 
      <ColumnDefinition Width="1*"/> 
     </Grid.ColumnDefinitions> 

     <TextBlock Grid.Row="0" Grid.Column="0" Text="A" Background="Green"/> 
     <TextBlock Grid.Row="1" Grid.Column="1" Text="AB" Background="Red"/> 
     <TextBlock Grid.Row="2" Grid.Column="2" Text="ABC" Background="Blue"/> 
     <TextBlock Grid.Row="3" Grid.Column="3" Text="ABCD" Background="Yellow"/> 

    </Grid> 
</Viewbox> 

图2.

Figure 2.

我怎样才能让这个网格行的大小相等的视框里面&列?

+0

为什么viewbox?仍然 – Muds

+0

,因为我想在更改窗口大小时调整内容大小。 –

+0

它应该按照预期与*一起工作,您是否尝试删除viewbox,如果不是抱歉,我仍然无法理解您的requiremtn – Muds

回答

2

可以强制大小共享这样的:

<Grid Grid.IsSharedSizeScope="True"> 
    <Grid.RowDefinitions> 
     <RowDefinition SharedSizeGroup="A"/> 
     <RowDefinition SharedSizeGroup="A"/> 
     <RowDefinition SharedSizeGroup="A"/> 
     <RowDefinition SharedSizeGroup="A"/> 
    </Grid.RowDefinitions> 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition SharedSizeGroup="B"/> 
     <ColumnDefinition SharedSizeGroup="B"/> 
     <ColumnDefinition SharedSizeGroup="B"/> 
     <ColumnDefinition SharedSizeGroup="B"/> 
    </Grid.ColumnDefinitions> 
+0

这解决了我的问题,非常感谢。 –

+0

不客气:) –

2

这是从网上

视框两者的ViewBox

行为是WPF中一个非常有用的控制。如果没有什么比 缩小到适合可用大小的内容。它不会调整 内容的大小,但会对其进行转换。

为什么在不想要的时候使用viewbox,试试另一个控件。

+0

我想调整我的内容在网格内,也想保持它们在平等的空间。 –

+0

你是什么意思?请更改您的问题以表明您想要的内容 – Muds

+0

我相信他希望文本的大小缩小以适应单元格内容。 –

1

而不是使用一个网格尝试使用UniformGrid的:

<Viewbox Stretch="Uniform"> 
    <UniformGrid Rows="4" Columns="4"> 
     <TextBlock Grid.Row="0" Grid.Column="0" Text="A" Background="Green"/> 
     <TextBlock /> 
     <TextBlock /> 
     <TextBlock /> 

     <TextBlock /> 
     <TextBlock Grid.Row="1" Grid.Column="1" Text="AB" Background="Red"/> 
     <TextBlock /> 
     <TextBlock /> 

     <TextBlock /> 
     <TextBlock /> 
     <TextBlock Grid.Row="2" Grid.Column="2" Text="ABC" Background="Blue"/> 
     <TextBlock /> 

     <TextBlock /> 
     <TextBlock /> 
     <TextBlock /> 
     <TextBlock Grid.Row="3" Grid.Column="3" Text="ABCD" Background="Yellow"/> 
     </UniformGrid> 
</Viewbox> 

只要确保你设置的行和列,取而代之的说每个子元素所在的行/列,您只需按顺序输入它们。

+0

您的答案解决了我的问题,但我们必须定义一些额外的“TextBlock”以根据需要制作它们。非常感谢你。无论如何,@ H.B.的回答给了我完美的工作解决方案。 –

相关问题