【问题标题】:Unwanted Spacing / Image Resizing in C# WPF StackPanelC# WPF StackPanel 中不需要的间距/图像大小调整
【发布时间】:2018-10-10 21:03:06
【问题描述】:

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

我正在构建一个带有图像的水平 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;
        };

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

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

【问题讨论】:

  • 只有查看Visual Tree,您才能了解确切的问题。
  • 嗯,最后一个屏幕截图来自 Live Visual Tree。所有属性都与我在此场景中使用的所有其他图像匹配,这是唯一一个像这样缩放的图像。图像编辑器确认它正好是 38x10,但编译器不断将其缩小到上面看到的“ActualHeight”和“ActualWidth”。我在树中找不到任何可以解释这一点的东西。

标签: c# wpf image-resizing stackpanel


【解决方案1】:

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

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

Title 元素是一个动态生成的标签,其大小与文本一致。不幸的是,这可以是任何宽度的两倍,这使得填充拉伸的动态网格的数学变得疯狂。

无论 StackPanel 以何种方式解释这些尺寸变化,它都是出于某种原因更改此图像的尺寸以补偿宽度以达到 100% 的宽度。

所以,我解决这个问题的方法是获取动态生成的标题标签的宽度值,并将该值四舍五入到下一个最接近的整数:

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

现在标记为动态缩放宽度的元素应该会改变。运行时,我的边框现在不再有间隙。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-11
    • 1970-01-01
    相关资源
    最近更新 更多