XAML在Canvas中自动调整CaptureElement

时间:2014-12-22 14:11:51

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

我在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(我认为不可能)。

示例:Canvas为500x500,自动调整大小CaptureElement的大小约为600x600,超出其父Canvas的范围。

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

1 个答案:

答案 0 :(得分:1)

您需要了解并非所有WPF Panel都能够自动更改其子级的大小。您可以在MSDN上的Panels Overview页面中找出哪些Panel可以并且无法调整其子女的大小,但简而言之,StackPanel s,WrapPanelCanvasGrid可以在DockPanelPanel时自动调整其子项<{1}}。

但是,当使用无法自动调整其子项大小的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.TopCaptureElement属性设置为非零值,那么这实际上会使Canvas甚至大于父{{1}}。