我的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>
我希望画布可以通过窗口调整大小,我通过将其宽度与窗口宽度绑定来实现。但是,我还希望它在调整窗口大小时保持在同一个顶部位置;相反,它执行此操作:
我不知道如何解决这个问题(因为我是一个完整的WPF初学者:))
答案 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>
请注意,无需绑定宽度或使用水平或垂直对齐