Graphics 防止CaptureElement尝试采用图像大小并推出scrollviewer

Graphics 防止CaptureElement尝试采用图像大小并推出scrollviewer,graphics,uwp,Graphics,Uwp,我有一个容器层次结构,其中包括一个朝向顶部的scrollviewer,这样我就可以看到我的整个表单。在内部,我可以安装一个CaptureElement,启动时可以以640*480分辨率连接到网络摄像头 我看到的行为是captureelement尝试采用与图像分辨率相同的渲染大小640*480,即使设置为“拉伸”,但我不希望也无法阻止这种行为。因此,它会将所有容器推送到scrollviewer中的容器。我希望它能像其他控件一样工作,比如按钮等,它只需要可用的内部大小,而scrollviewer只在

我有一个容器层次结构,其中包括一个朝向顶部的scrollviewer,这样我就可以看到我的整个表单。在内部,我可以安装一个CaptureElement,启动时可以以640*480分辨率连接到网络摄像头

我看到的行为是captureelement尝试采用与图像分辨率相同的渲染大小640*480,即使设置为“拉伸”,但我不希望也无法阻止这种行为。因此,它会将所有容器推送到scrollviewer中的容器。我希望它能像其他控件一样工作,比如按钮等,它只需要可用的内部大小,而scrollviewer只在必要时才参与

下面的代码演示了这一点,但注释/取消注释以查看按钮而不是CaptureElement:

Inherits Page

Private mc As New MediaCapture
Private ce As New CaptureElement

Private WithEvents TopGrid As New Grid
Private vs As New ScrollViewer
Private WithEvents CamGrid As New Grid

Private but As New Button

Public Sub New()

    ' This call is required by the designer.
    InitializeComponent()

    ' Add any initialization after the InitializeComponent() call.

    Content = TopGrid

    TopGrid.Width = 600
    TopGrid.Height = 200
    TopGrid.Children.Add(vs)
    vs.Content = CamGrid
    vs.HorizontalScrollBarVisibility = ScrollBarVisibility.Visible
    vs.VerticalScrollBarVisibility = ScrollBarVisibility.Visible

    but.Content = "hello"

    but.HorizontalAlignment = HorizontalAlignment.Stretch
    but.VerticalAlignment = VerticalAlignment.Stretch
    ce.HorizontalAlignment = HorizontalAlignment.Stretch
    but.VerticalAlignment = VerticalAlignment.Stretch

    InitCam()


    CamGrid.Children.Add(ce)
    'CamGrid.Children.Add(but)

End Sub

Private Async Sub InitCam()
    Await mc.InitializeAsync
    ce.Source = mc
    Dim t = mc.StartPreviewAsync
End Sub

Private Sub CamGrid_SizeChanged(sender As Object, e As SizeChangedEventArgs) Handles CamGrid.SizeChanged
    Dim w = e.NewSize.Width
    Dim h = e.NewSize.Height
    Dim a = 1
End Sub

好的,我找到了答案。在更高级别的ScrollViewer中,为要管理其大小的控件使用画布。画布不会展开以包含其子级,因此不会导致冲突/递归。

必须为
CaptureElement
设置高度,否则它将获得默认预览大小。您已经知道
TopGrid
高度为200,为什么不直接设置它?`ce.Height=200`上面的代码只是一个例子——实际上,外部容器总是有某种固定的大小,可能是表单大小。但我希望它是流动的,而不是固定大小的。我只希望CaptureElement与其他控件的行为保持一致,而不是仅仅因为显示图像的分辨率而推出SrCollViewer。如果可以的话,我很乐意将它嵌套在其他容器中,但我不希望任何东西有固定的大小