WPF使元素的顶部位置固定

时间:2017-02-09 23:52:36

标签: c# wpf

我的WPF应用程序中有以下XAML:

<Grid RenderTransformOrigin="0.524,0.496" Height="478" VerticalAlignment="Bottom">
            <Grid.RowDefinitions>
                <RowDefinition Height="*"/>
            </Grid.RowDefinitions>
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="*"/>
                <ColumnDefinition Width="*"/>
            </Grid.ColumnDefinitions>
            <Canvas Grid.Row="0" Margin="0,22,0,0" Width="{Binding ActualWidth, ElementName=window, Mode=OneWay}" Background="AliceBlue" Height="43" HorizontalAlignment="Left" VerticalAlignment="Top">
                <Label x:Name="label" Content="Science Magazine - Papers" Canvas.Left="22" Canvas.Top="6" FontSize="16" Panel.ZIndex="1"/>
            </Canvas>
        </Grid>

我希望画布可以通过窗口调整大小,我通过将其宽度与窗口宽度绑定来实现。但是,我还希望它在调整窗口大小时保持在同一个顶部位置;相反,它执行此操作:enter image description here

我不知道如何解决这个问题(因为我是一个完整的WPF初学者:))

4 个答案:

答案 0 :(得分:0)

您可以将Grid放在DockPanel内,并将Dock属性设置为Top。您还可以从DockPanel指定一些边距。

<DockPanel>
    <Grid DockPanel.Dock="Top" Margin="0,0,0,0" />
</DockPanel>

答案 1 :(得分:0)

尝试制作Grid VerticalAlignment="Top"而不是Bottom

答案 2 :(得分:0)

制作两行,第一行具有自动高度(以使其高度精确到其内容),在画布上用第二行完成,而第二行则用于页面的其余内容。

<!--main grid-->
        <Grid>
            <Grid.RowDefinitions>
                <RowDefinition Height="Auto"/>
                <RowDefinition Height="*"/>
            </Grid.RowDefinitions>

            <Canvas Grid.Row="0">
                <!--content of canvas-->
            </Canvas>

            <Grid Grid.Row="1">
                <!--rest of the content-->
            </Grid>
        </Grid>

答案 3 :(得分:-1)

我认为StackPanel是一个更简单的选择:

<StackPanel>
    <Canvas Grid.Row="0" Margin="0,50,0,0" Background="Red" Height="43" >
        <Label x:Name="label" Content="Science Magazine - Papers" Canvas.Left="22" Canvas.Top="6" FontSize="16" Panel.ZIndex="1"/>
    </Canvas>
</StackPanel> 

请注意,无需绑定宽度或使用水平或垂直对齐