如何防止功能区控件 (winforms) 上的 Infragistics ComboBoxTool 中弹出不需要的工具提示

发布于 2024-11-02 09:33:01 字数 426 浏览 1 评论 0原文

我在 UltraToolbarsManager 上有一个 ComboBoxTool 实现功能区控件。无论我将 ToolTipText 设置为什么,它总是显示工具提示:

在此处输入图像描述

[例如,将鼠标悬停在 gdg 组合显示上[this]

我尝试将所有其他工具提示相关属性(ToolTipTextFormatted、ToolTipTitle)设置为 null,但这没有帮助。

  • 如果指定了非零长度的工具提示文本,则按预期显示
  • 功能区子控件均以编程方式添加功能
  • 区上的其他控件没有此问题

我还尝试在虚拟项目上设置一个非常简单的功能区,并且不会表现出这种奇怪的行为。所以这是其他因素在影响这一点。

I have a ComboBoxTool on an UltraToolbarsManager implementing a ribbon control. No matter what I set the ToolTipText to it always displays a tooltip:

enter image description here

[e.g. mousing over the gdg combo show this]

I have tried setting all the other tooltip related attributes (ToolTipTextFormatted, ToolTipTitle) to null but this doesn't help.

  • If a non-zero length tooltip text is specified then this shows as expected
  • The ribbon child controls are all added programatically
  • The other controls on the ribbon do not have this issue

I have also tried setting-up a very simple ribbon on a dummy project and that does not exhibit this strange behaviour. So it is something else that is effecting this.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

§普罗旺斯的薰衣草 2024-11-09 09:33:01

看起来这可能是一个错误。您或许应该将其提交给 Infragistics。

如果您不希望为整个功能区组显示任何工具提示,可以将 RibbonGroup.Settings.ShowToolTips 值设置为 False。事实上,如果您想在更大范围内关闭工具提示,可以将以下属性之一设置为 False:

  • RibbonTab.GroupSettings.ShowToolTips
  • ContextualTabGroup.GroupSettings.ShowToolTips
  • Ribbon.GroupSettings.ShowToolTips
  • UltraToolbarsManager.ShowToolTips

每个属性都会打开关闭关联容器内所有工具实例的工具提示。

但是,如果您只想关闭该工具的工具提示,则可以使用从 ComboBoxTool 派生的工具。在派生工具中,您可以覆盖 ShouldDisplayToolTip 并且可以返回 False。

It looks like it may be a bug. You should probably submit it to Infragistics.

If you don't want any tool tips displaying for the entire ribbon group, you can set the RibbonGroup.Settings.ShowToolTips value to False. In fact, if you want to turn off tool tips on a wider scale, you can set one of the following properties to False instead:

  • RibbonTab.GroupSettings.ShowToolTips
  • ContextualTabGroup.GroupSettings.ShowToolTips
  • Ribbon.GroupSettings.ShowToolTips
  • UltraToolbarsManager.ShowToolTips

Each property will turn off tool tips for all tool instances within the associated container.

But if you only want to turn of tool tips for this one tool, you can use a tool that derives from ComboBoxTool. In your derived tool, you can override ShouldDisplayToolTip and you can return False.

っ左 2024-11-09 09:33:01

Infragistics 提供了答案:

  1. 将您自己的 CreationFilter 添加到 ToolbarsManager

    ultraToolbarsManager1.CreationFilter = new MyCreation();

  2. 捕获工具创建并用您自己的实现替换工具提示

    公共类 MyCreation : IUIElementCreationFilter {
    
        私有只读 int 最大值;
    
        公共我的创作()
        {
        }
    
        公共MyCreation(int toolTipMaxWidth)
        {
            max = 工具提示最大宽度;
        }
    
        公共无效AfterCreateChildElements(UIElement父级)
        {
            Parent.ToolTipItem = new MyToolTipItem(max);
        }
    
        公共 bool BeforeCreateChildElements(UIElement 父级)
        {
            返回假;
        }
    }
    
    
    公共类 MyToolTipItem : IToolTipItem {
        私有只读 int 最大值;
    
        公共 MyToolTipItem(int maxWidth)
        {
            最大=最大宽度;
        }
    
        公共 MyToolTipItem()
        {
        }
    
        public ToolTipInfo GetToolTipInfo(Point mousePosition, UIElement element, UIElement previousToolTipElement,
                                      工具提示信息(工具提示信息默认)
        {
            // 设置功能区 ApplicationMenuButton 的工具提示信息
            var app = 元素作为 ApplicationMenuButtonUIElement;
            if (应用!= null)
            {
                var appmenu = ((UltraToolbarsDockAreaUIElement) ((app.Parent).Parent)).ToolbarsManager.Ribbon.ApplicationMenu;
                如果(最大值> 0)
                    toolTipInfoDefault.MaxWidth = 最大;
                toolTipInfoDefault.Title = appmenu.ToolTipTitle;
    
                字符串 tooltiptex = appmenu.ToolTipText;
                if (!string.IsNullOrEmpty(appmenu.ToolTipTextFormatted))
                {
                    toolTipInfoDefault.ToolTipTextStyle = ToolTipTextStyle.Formatted;
                    tooltiptex = appmenu.ToolTipTextFormatted;
                }
                toolTipInfoDefault.ToolTipText = tooltiptex;
            }
    
            // 设置工具的提示信息
            if (element.ToolTipItem != null && UIElement.IsContextOfType(element.GetContext(), typeof (ToolBase)))
            {
                var tool = (ToolBase) element.GetContext(typeof (ToolBase));
                var loc = tool.ToolbarsManager.DockWithinContainer.PointToScreen(new Point(0, 0));
            loc.Offset(tool.UIElement.Rect.Location.X, 185);
    
                如果(最大值> 0)
                    toolTipInfoDefault.MaxWidth = 最大;
            toolTipInfoDefault.Title = tool.SharedProps.ToolTipTitle;
            字符串 tooltiptex = tool.SharedProps.ToolTipText;
                if (!string.IsNullOrEmpty(tool.SharedProps.ToolTipTextFormatted))
                {
                    toolTipInfoDefault.ToolTipTextStyle = ToolTipTextStyle.Formatted;
                    tooltiptex = tool.SharedProps.ToolTipTextFormatted;
                }
                toolTipInfoDefault.ToolTipText = tooltiptex;
                toolTipInfoDefault.DisplayStyle = Infragistics.Win.ToolTipDisplayStyle.Office2007;
                toolTipInfoDefault.Location = loc;
            }
            返回工具提示信息默认值;
        }
    

需要进行一些调整才能将工具提示放在正确的位置并从 TooltipTextResolved 中获取工具提示文本。

Infragistics supplied an answer:

  1. Add your own CreationFilter to the ToolbarsManager

    ultraToolbarsManager1.CreationFilter = new MyCreation();

  2. Catch the tool creation and replace the tooltip with your own implementation

    public class MyCreation : IUIElementCreationFilter  {
    
        private readonly int max;
    
        public MyCreation()
        {
        }
    
        public MyCreation(int toolTipMaxWidth)
        {
            max = toolTipMaxWidth;
        }
    
        public void AfterCreateChildElements(UIElement parent)
        {
            parent.ToolTipItem = new MyToolTipItem(max);
        }
    
        public bool BeforeCreateChildElements(UIElement parent)
        {
            return false;
        }
    }
    
    
    public class MyToolTipItem : IToolTipItem   {
        private readonly int max;
    
        public MyToolTipItem(int maxWidth)
        {
            max = maxWidth;
        }
    
        public MyToolTipItem()
        {
        }
    
        public ToolTipInfo GetToolTipInfo(Point mousePosition, UIElement element, UIElement previousToolTipElement,
                                      ToolTipInfo toolTipInfoDefault)
        {
            // set tooltip info for ribbon ApplicationMenuButton
            var app = element as ApplicationMenuButtonUIElement;
            if (app != null)
            {
                var appmenu = ((UltraToolbarsDockAreaUIElement) ((app.Parent).Parent)).ToolbarsManager.Ribbon.ApplicationMenu;
                if (max > 0)
                    toolTipInfoDefault.MaxWidth = max;
                toolTipInfoDefault.Title = appmenu.ToolTipTitle;
    
                string tooltiptex = appmenu.ToolTipText;
                if (!string.IsNullOrEmpty(appmenu.ToolTipTextFormatted))
                {
                    toolTipInfoDefault.ToolTipTextStyle = ToolTipTextStyle.Formatted;
                    tooltiptex = appmenu.ToolTipTextFormatted;
                }
                toolTipInfoDefault.ToolTipText = tooltiptex;
            }
    
            // set tooltip info for tools
            if (element.ToolTipItem != null && UIElement.IsContextOfType(element.GetContext(), typeof (ToolBase)))
            {
                var tool = (ToolBase) element.GetContext(typeof (ToolBase));
                var loc = tool.ToolbarsManager.DockWithinContainer.PointToScreen(new Point(0, 0));
            loc.Offset(tool.UIElement.Rect.Location.X, 185);
    
                if (max > 0)
                    toolTipInfoDefault.MaxWidth = max;
            toolTipInfoDefault.Title = tool.SharedProps.ToolTipTitle;
            string tooltiptex = tool.SharedProps.ToolTipText;
                if (!string.IsNullOrEmpty(tool.SharedProps.ToolTipTextFormatted))
                {
                    toolTipInfoDefault.ToolTipTextStyle = ToolTipTextStyle.Formatted;
                    tooltiptex = tool.SharedProps.ToolTipTextFormatted;
                }
                toolTipInfoDefault.ToolTipText = tooltiptex;
                toolTipInfoDefault.DisplayStyle = Infragistics.Win.ToolTipDisplayStyle.Office2007;
                toolTipInfoDefault.Location = loc;
            }
            return toolTipInfoDefault;
        }
    

Required a bit of tweaking to get the tooltip in the right place and pick-up the tooltip text from TooltipTextResolved.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文