2012-05-14 27 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> 
相關問題