XAML 在画布中自动调整捕获元素的大小
本文关键字:元素 调整 布中自 XAML | 更新日期: 2023-09-27 18:35:03
我在Windows应用商店应用程序中有以下XAML代码:
<Canvas HorizontalAlignment="Left" VerticalAlignment="Top" x:Name="capturePreviewCanvas" Width="774" Margin="288,48,0,0" Height="688">
<CaptureElement x:Name="capturePreviewCaptureElement" Canvas.Left="10" Canvas.Top="10"/>
</Canvas>
我将CaptureElement
的宽度和高度设置为自动调整大小,我希望它能填满整个父Canvas
但这似乎不是它的工作方式。如果我将大小设置为 Auto
它只会填充相同大小的区域,即使该区域大于父Canvas
(我认为这是不可能的(。
示例:画布为 500x500,自动调整大小CaptureElement
其大小约为 600x600,超出了其父Canvas
的边界。
为什么会发生这种情况,如何让CaptureElement
始终自动调整大小以Fit
或Fill
其父Canvas
?
您需要
了解,并非所有 WPF Panel
都能够自动更改其子级的大小。您可以在 MSDN 上的"面板概述"页中了解哪些Panel
可以调整其子级的大小,但简而言之,StackPanel
、WrapPanel
和 Canvas
不会自动调整其子级的大小,而 Grid
和 DockPanel
可以。
但是,当使用无法自动调整其子级大小的Panel
时,您可以使用一个技巧。您可以简单地将CaptureElement
的维度与父Canvas
的维度进行数据绑定:
<CaptureElement x:Name="capturePreviewCaptureElement" Canvas.Left="10" Canvas.Top="10"
Width="{Binding ActualWidth, ElementName=capturePreviewCaptureElement}"
Height="{Binding ActualHeight, ElementName=capturePreviewCaptureElement}" />
当然,如果将Canvas.Left
和Canvas.Top
属性设置为非零值,那么这实际上会使CaptureElement
比父Canvas
更大。