为什么水平网格拆分器连续居中居中,而垂直网格拆分器却不居中?

时间:2019-12-27 14:09:39

标签: wpf gridsplitter

我正在学习如何使用网格分割器,而水平分割器与垂直分割器在外观上似乎有很大的不同,这让我感到困惑。如果您看下面的XAML,我很容易制作了第一个网格分割器,一切都按预期工作,我设置了它应该位于的行和列,然后设置了应该跨越的行数。它将分离器放在我期望的位置,在列的右侧。 (它实际上并没有调整任何大小,我也不知道为什么,但是至少它在那儿,应该在哪里)。

但是,第二个分离器根本不会以任何方式配合。我希望将其放置在表单底部的文本框上方。因此,我将其设置为该单元格,看起来它置于行的中心。显然我对一些我不了解的简单事物感到困惑,有人可以告诉我为什么第二个网格拆分器的行为不如我想要的吗?

<Window x:Class="FontViewer.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:local="clr-namespace:FontViewer"
    mc:Ignorable="d"
    Title="Font Viewer" Height="480" Width="600">

<Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="*"/>
        <ColumnDefinition Width="2*"/>
    </Grid.ColumnDefinitions>

    <Grid.RowDefinitions>
        <RowDefinition Height="0.8*"/>
        <RowDefinition Height="0.5*"/>
        <RowDefinition Height="0.7*"/>
        <RowDefinition Height="1*"/>
        <RowDefinition Height="*"/>
        <RowDefinition Height="0.3*"/>
    </Grid.RowDefinitions>

    <Border CornerRadius="6"
            BorderThickness="1"
            BorderBrush="Gray"
            Background="LightGray"
            Padding="8"
            Margin="6"
            Grid.ColumnSpan="2">
        <TextBlock FontSize="14"
                   TextWrapping="Wrap">
            Select a font to view from the list below.
            You can change the text by typing in the region at the bottom.
        </TextBlock>
    </Border>

    <ListBox x:Name="FontList"
             Grid.Row="1"
             Grid.RowSpan="5"
             HorizontalAlignment="Right"
             ItemsSource="{x:Static Fonts.SystemFontFamilies}"
             Width="190"
             Margin="0 0 0 8">
    </ListBox>

    <TextBox x:Name="SampleText"
             Grid.Row="5"
             Grid.Column="1"
             VerticalAlignment="Center"
             Height="18"
             MinLines="4"
             Margin="0 0 6 0"
             TextWrapping="Wrap"
             ToolTip="Type here to change the preview text.">
        The quick brown fox jumps over the lazy dog.
    </TextBox>

    <TextBlock Text="{Binding ElementName=SampleText, Path=Text}"
               FontFamily="{Binding ElementName=FontList,Path=SelectedItem}"
               FontSize="10"
               TextWrapping="Wrap"
               Margin="6"
               Grid.Column="1"
               Grid.Row="1"/>
    <TextBlock Text="{Binding ElementName=SampleText, Path=Text}"
               FontFamily="{Binding ElementName=FontList,Path=SelectedItem}"
               FontSize="16"
               TextWrapping="Wrap"
               Margin="6"
               Grid.Column="1"
               Grid.Row="2"/>
    <TextBlock Text="{Binding ElementName=SampleText, Path=Text}"
               FontFamily="{Binding ElementName=FontList,Path=SelectedItem}"
               FontSize="24"
               TextWrapping="Wrap"
               Margin="6"
               Grid.Column="1"
               Grid.Row="3"/>
    <TextBlock Text="{Binding ElementName=SampleText, Path=Text}"
               FontFamily="{Binding ElementName=FontList,Path=SelectedItem}"
               FontSize="32"
               TextWrapping="Wrap" 
               Grid.Column="1"
               Grid.Row="3"
               Margin="6,84,6,5.765" Grid.RowSpan="2"/>

    <GridSplitter Grid.Row="0"
            Grid.Column="0"
            Grid.RowSpan="6"
            Width="3"
            Background="LightGray"
            ResizeBehavior="PreviousAndNext"
            ResizeDirection="Columns" />

    <GridSplitter Grid.Row="5"
            Grid.Column="1"
            Height="3"
            Background="Black"
            ResizeBehavior="PreviousAndNext"
            ResizeDirection="Rows" />
</Grid>

编辑:看来我没有在代码中包含关闭窗口标签,但是它在那里,由于某种原因它只是被省略了。

1 个答案:

答案 0 :(得分:0)

你有

             Grid.RowSpan="6"

在第一个上,它将拉伸它。

尝试暂时将其取出。

通常在网格拆分器上设置拉伸。

将其他人更改为:

     <GridSplitter Grid.Row="5"
        Grid.Column="1"
        Height="3"
        Background="Green"
        ResizeBehavior="PreviousAndNext"
        HorizontalAlignment="Stretch"
        ResizeDirection="Rows" />

它将水平伸展。

仍然不会做很多,但是会水平拉伸。

很难告诉您您还想做什么,但是通常将网格拆分器与列或行边缘对齐。

请参见

https://docs.microsoft.com/en-us/dotnet/framework/wpf/controls/how-to-resize-rows-with-a-gridsplitter

https://docs.microsoft.com/en-us/dotnet/framework/wpf/controls/how-to-resize-columns-with-a-gridsplitter