2

简单地说,我有一个 Grid,它有三个同样高的行和两个按钮。我想在第一行有第一个按钮,然后第二行是空的,最后是第三行中的第二个按钮。这样我就得到了相对大小的按钮之间的间距。我需要这个而不是硬编码绝对边距值。所以这里是 XAML:

                <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. 我该如何解决这个问题?我需要灵活性,所以想象一下我可以有任意数量的按钮,这些按钮可以由网格中任意数量的空行/列分隔。
4

2 回答 2

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

于 2012-05-14T07:30:35.073 回答
0

Viewbox 不适用于百分比。在我看来,我不推荐使用 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>
于 2017-10-31T01:02:20.447 回答