我在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
始终自动调整为Fit
或Fill
其父Canvas
?
答案 0 :(得分:1)
您需要了解并非所有WPF Panel
都能够自动更改其子级的大小。您可以在MSDN上的Panels Overview页面中找出哪些Panel
可以并且无法调整其子女的大小,但简而言之,StackPanel
s,WrapPanel
和Canvas
和Grid
可以在DockPanel
和Panel
时自动调整其子项<{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.Top
和CaptureElement
属性设置为非零值,那么这实际上会使Canvas
甚至大于父{{1}}。