C#WPF StackPanel中不需要的间距/图像大小调整

时间:2018-10-10 21:03:07

标签: c# wpf image-resizing stackpanel

希望这很简单-但是,我找不到任何与之相关的帖子。

我正在构建带有图像的水平StackPanel,由于某种原因,其中一个图像的尺寸会不断调整,从而导致图像周围出现非常不需要的边框。我可以做些什么才能将输出强制为图像的原始像素大小,或者我可以禁用某些允许该StackPanel稍微调整图像大小的东西?

You can see the border causing gaps right after the Title text

如果仔细观察,您会发现在标题文本结尾的图像周围正出现透明边框。我不知道为什么会这样。这是图片的代码:

Image titleRightCap = new Image();
        titleRightCap.Source = new BitmapImage(new Uri("pack://application:,,,/skins/default/top_r_title_cap.png", UriKind.Absolute));
        borderTop.Children.Add(titleRightCap);
        titleRightCap.Loaded += delegate (object s, RoutedEventArgs e)
        {
            headWidth += titleRightCap.ActualWidth;
        };

这是实时输出,您可以在其中看到大小差异:

Live Output

如果可以强制将大小保持不变,我认为应该可以解决此问题,但是我不确定该怎么做。

1 个答案:

答案 0 :(得分:0)

所以,我不确定为什么为什么。但是,这似乎与某种内部数学计算有关。

此项是一个“顶部”边框控件,该控件是动态生成的,并在Windows更改大小时扩展。为了动态扩展,有一个带有图像画笔的网格元素,它仅绘制要填充的边框背景。但是,这需要边框控件中所有其他元素的宽度才能正确计算。

Title元素是动态生成的标签,其大小与文本大小相同。不幸的是,这可以是任何宽度的两倍,并且会使数学难以满足于填充拉伸的动态网格。

StackPanel以任何方式解释这些大小更改,都是出于某种原因更改了此Image的大小,以补偿宽度以精确达到100%宽度。

因此,要解决此问题,我采取了动态生成的“标题”标签的Width值并将其四舍五入到下一个最接近的整数:

titleTextGraphic.Width = Math.Ceiling(titleTextGraphic.ActualWidth);

现在,标记为动态缩放宽度的元素应该更改。运行后,我的边界现在不再有空隙。

enter image description here

因此,目前看来,它工作正常。我感谢您提供的帮助,希望对其他遇到类似问题的人有所帮助。