【问题标题】:XAML Autosize CaptureElement in CanvasXAML 自动调整 Canvas 中的 CaptureElement 大小
【发布时间】:2015-02-20 15:37:34
【问题描述】:

我在 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,Autosize CaptureElement 将自身大小调整为 600x600 左右,超出其父级 Canvas 的范围。

为什么会发生这种情况,如何让 CaptureElement 始终自动调整为 FitFill 其父级 Canvas

【问题讨论】:

标签: c# wpf xaml canvas windows-store-apps


【解决方案1】:

您需要了解并非所有 WPF Panels 都能够自动更改其子级的大小。您可以在 MSDN 上的 Panels Overview 页面中了解哪些 Panels 可以调整其子代的大小,但总之,StackPanels、WrapPanels 和 Canvass 可以Grids 和 DockPanels 可以自动调整孩子的大小。

但是,当使用无法自动调整其子级大小的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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-04
    • 2015-10-24
    • 2010-09-17
    • 2013-02-17
    • 2021-01-16
    • 1970-01-01
    相关资源
    最近更新 更多