2012-05-14 24 views
2

简单地说,我有一个表格有三个同样高的行和两个按钮。我想在第一行有第一个按钮,然后是第二行空,最后是第三行的第二个按钮。这样我可以在相对大小的按钮之间获得间距。我需要这个而不是硬编码的绝对边际值。所以这里是XAML的:为什么Viewbox使用等间距的行/列打破格子中的布局?

   <Grid> 
        <Grid.RowDefinitions> 
         <RowDefinition Height="*" /> 
         <RowDefinition Height="*" /> 
         <RowDefinition Height="*" /> 
        </Grid.RowDefinitions> 
        <Button Grid.Row="0">Button 1</Button> 
        <Button Grid.Row="2">Button 2</Button> 
       </Grid> 

很好用!现在,更多的功能,我需要的是拥有一切可扩展的,所以我把它放在Viewbox控件:

  <Viewbox> 
       <Grid> 
        <Grid.RowDefinitions> 
         <RowDefinition Height="*" /> 
         <RowDefinition Height="*" /> 
         <RowDefinition Height="*" /> 
        </Grid.RowDefinitions> 
        <Button Grid.Row="0">Button 1</Button> 
        <Button Grid.Row="2">Button 2</Button> 
       </Grid> 
      </Viewbox> 

突然布局被打破。我得到了Viewbox提供的缩放比例,但我没有在按钮之间获得空白区域。所以有两个问题:

  1. 为什么Viewbox在这里打破了什么?
  2. 我怎样才能解决这个?我需要灵活性,所以想象一下,我可以有任意数量的按钮,可以通过Grid中任意数量的空行/列进行分隔。

回答

0

尝试......

 <Viewbox> 
     <Grid> 
      <Grid.RowDefinitions> 
       <RowDefinition Height="*" /> 
       <RowDefinition 
         MinHeight="{Binding Path=ActualHeight, 
            ElementName=MyButton1}" 
         Height="*" /> 
       <RowDefinition Height="*" /> 
      </Grid.RowDefinitions> 
      <Button Grid.Row="0" x:Name="MyButton1">Button 1</Button> 
      <Button Grid.Row="2">Button 2</Button> 
     </Grid> 
    </Viewbox> 

严格假设的按钮都是相同的高度。

而对于之所以出现这种情况检查这个... http://connect.microsoft.com/VisualStudio/feedback/details/403562/wpf-grid-layout-is-broken-when-put-in-viewbox

0

Viewbox控件并不能很好地工作百分比。在我看来,我不建议使用Viewbox来“分组”所有元素。您应该使用视框只是按钮上的文字:

<Window.Resources> 
    <Style x:Key="DefaultButton" TargetType="Button"> 
     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="Button"> 
        <Border Background="LightGray"> 
         <Viewbox> 
         <ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center" /> 
         </Viewbox> 
        </Border> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
    </Style> 
</Window.Resources> 
<Grid> 
    <Border> 
     <Grid> 
      <Grid.RowDefinitions> 
       <RowDefinition Height="0.3*" /> 
       <RowDefinition Height="0.3*" /> 
       <RowDefinition Height="0.3*" /> 
      </Grid.RowDefinitions> 
      <Button Grid.Row="0" Style="{DynamicResource DefaultButton}">Button 1</Button> 
      <Button Grid.Row="2" Style="{DynamicResource DefaultButton}">Button 2</Button> 
     </Grid> 
    </Border> 
</Grid> 
相关问题