【问题标题】:Problem with .NET ToolStripMenuItem ImageAlign property.NET ToolStripMenuItem ImageAlign 属性的问题
【发布时间】:2010-03-31 00:35:39
【问题描述】:

我正在 Visual Studio 9 中创建一个 .NET 表单应用程序。在设计器中,我添加了一个 MenuStrip 到我添加 ToolStripMenuItems(标准下拉菜单)的位置。我通过设置 Image 属性向 ToolStripMenuItems 添加了图像。

图像按预期显示,但它们向左对齐,即使 ImageAlign 属性设置为 MiddleCenter。将 ImageAlign 更改为任何值似乎对图像的对齐没有任何影响。

我想要的是让图像在下拉菜单左侧的“图像列”的中间对齐。 ImageAlign 属性不应该这样做吗?

【问题讨论】:

    标签: .net winforms formatting


    【解决方案1】:

    此代码可以正常工作:

    public partial class Form1 : Form {
        public Form1() {
            InitializeComponent();
            menuStrip1.Renderer = new MyRenderer();
        }
        private class MyRenderer : ToolStripProfessionalRenderer {
            protected override void OnRenderItemImage(ToolStripItemImageRenderEventArgs e) {
                Console.WriteLine("{0}: {1} <= {2}", e.Item.Name, e.ImageRectangle, e.Image.Size);
                if (e.Item is ToolStripMenuItem) {
                    int x = e.ImageRectangle.Left + 20 - e.Image.Width;
                    e.Graphics.DrawImage(e.Image, new Point(x, 0));
                }
                else base.OnRenderItemImage(e);
            }
        }
    }
    

    最终的问题是菜单项的布局是计算和内部的。您无法找出图像的结束位置和文本的开始位置。遗憾地调用 OnRenderItemImage() 时没有任何提示图像区域的宽度。有点设计失误。

    【讨论】:

    • @nobugz,您的解决方案对我有用,谢谢。尽管 ImageAlign 属性不像我预期的那样容易。
    • @oberon,是的,您在尝试自定义 ToolStrip 类时会经常遇到这种情况。他们有一些设计缺陷,并在真正完成之前发货。请将您的话题标记为已回答,以关闭您的话题。
    【解决方案2】:

    我以前遇到过这种情况。 ImageAlignTextAlignTextImageRelation 属性似乎对这些控件没有任何作用。我最终不得不将所有图像重新制作成相同大小,并以我希望它们的外观居中于背景中。

    【讨论】:

    • 我想过同样的解决方案,但希望有一个程序化的解决方案来解决这个问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-08-19
    • 1970-01-01
    • 1970-01-01
    • 2010-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多