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始终自动调整大小以FitFill其父Canvas

XAML 在画布中自动调整捕获元素的大小

您需要

了解,并非所有 WPF Panel都能够自动更改其子级的大小。您可以在 MSDN 上的"面板概述"页中了解哪些Panel可以调整其子级的大小,但简而言之,StackPanelWrapPanelCanvas 不会自动调整其子级的大小,而 GridDockPanel 可以。

但是,当使用无法自动调整其子级大小的Panel时,您可以使用一个技巧。您可以简单地将CaptureElement的维度与父Canvas的维度进行数据绑定:

<CaptureElement x:Name="capturePreviewCaptureElement" Canvas.Left="10" Canvas.Top="10"
    Width="{Binding ActualWidth, ElementName=capturePreviewCaptureElement}"
    Height="{Binding ActualHeight, ElementName=capturePreviewCaptureElement}" />

当然,如果将Canvas.LeftCanvas.Top属性设置为非零值,那么这实际上会使CaptureElement比父Canvas更大。