繁体   English   中英

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

[英]Unwanted Spacing / Image Resizing in C# WPF StackPanel

希望这篇文章很简单-但是,我找不到任何相关的文章。

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

您可以在“标题”文本后立即看到导致间隙的边框

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

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;
        };

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

实时输出

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

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

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

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

无论哪种方式,StackPanel都会解释这些大小更改,这是由于某种原因而更改了此Image的大小以补偿宽度以精确达到100%宽度。

因此,解决此问题的方法是采用动态生成的“标题”标签的“宽度”值,并将该值四舍五入到下一个最接近的整数:

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

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

在此处输入图片说明

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM