c# WPF元素位置不正确

本文关键字:不正确 位置 元素 WPF | 更新日期: 2023-09-27 17:53:33

我正在使用WPF和EmguCV 3.0开发一个视觉处理应用程序。我的问题是元素在屏幕上的位置不正确。我已经查看了填充是什么,它返回所有边为0。来自Emgu的ImageBox元素(我使用它来显示图像)被封装在Windows Forms Host控件中。我还有另外两个正确显示的ImageBox元素。每个ImageBox元素在TabControl中都有自己的选项卡。在启动时,我设置了所有imagebox和它们的画布的宽度和高度属性。

另外需要注意的是,另外两个imagebox也溢出了它们的边界,但在标签之间来回切换后,它们会被重置回边界。这只发生一次。

这是一个链接到屏幕截图的UI看起来像什么。https://i.stack.imgur.com/1RMX0.jpg

另外,这里是ImageBoxes的XAML和c#代码。

<TabItem x:Name="ImageTabControlHSV">
    <TabItem.Header>
        <StackPanel Orientation="Horizontal">
            <TextBlock Text="HSV" />
        </StackPanel>
    </TabItem.Header>
    <Canvas x:Name="HSVImageCanvas">
        <WindowsFormsHost>
            <emui:ImageBox x:Name="HSVImageBox"/>
        </WindowsFormsHost>
    </Canvas>
</TabItem>
//Width and height properties are gotten from camera image.
HSVImageBox.Width = ratioWidth;
HSVImageBox.Height = ratioHeight;
HSVImageCanvas.Width = width;
HSVImageCanvas.Height = height;
HSVImageCanvas.MaxHeight = height;
HSVImageCanvas.MaxWidth = width;
如有任何帮助或建议,我将不胜感激。

UPDATE:设置一个计数器,显示有问题的ImageBox被选中的次数,并使用Canvas.SetTop()和Canvas.SetLeft()似乎是一个解决方案。我还是想知道为什么画布会改变它的位置

c# WPF元素位置不正确

您可以尝试执行画布。SetTop(hsvimageccanvas, hsvimageccanvas . top)和Canvas。SetLeft (HSVImageCanvas HSVImageCanvas.Left)。

Doug