Свободная лента: указать положение групп контекстных вкладок?

Есть ли в Fluent Ribbon Control Suite способ сделать так, чтобы группы контекстных вкладок отображались первыми, а не последними? Я использовал более старую сборку и имел контекстную группу вкладок для первых трех элементов вкладок и еще два без группы. Скачал и собрал новейший исходник; вкладки в группе теперь находятся на правом конце. Я хочу, чтобы они отображались в том же порядке, в котором они указаны в xaml. Я не вижу никаких очевидных свойств, которые позволили бы мне указать порядок.


person redtetrahedron    schedule 08.03.2013    source источник


Ответы (1)


Поскольку ни у кого не было ответа на этот вопрос, и я только что получил за это значок Tumbleweed :), я решил опубликовать свое решение, которое заключалось в изменении кода Fluent Ribbon Control Suite. Я изменил ArrangeOverride в классе RibbonTabsContainer. Это привело к тому, что сгруппированные вкладки отображались раньше, чем вкладки, не входящие в группу:

        /// <summary>
        /// Positions child elements and determines
        /// a size for the control
        /// </summary>
        /// <param name="finalSize">The final area within the parent 
        /// that this element should use to arrange 
        /// itself and its children</param>
        /// <returns>The actual size used</returns>
        protected override Size ArrangeOverride(Size finalSize)
        {
            var finalRect = new Rect(finalSize)
                                {
                                    X = -this.HorizontalOffset
                                };

            var orderedChildren = this.InternalChildren.OfType<RibbonTabItem>()
                                      .OrderByDescending(x => x.Group != null); // <==== originally .OrderBy

            foreach (var item in orderedChildren)
            {
                finalRect.Width = item.DesiredSize.Width;
                finalRect.Height = Math.Max(finalSize.Height, item.DesiredSize.Height);
                item.Arrange(finalRect);
                finalRect.X += item.DesiredSize.Width;
            }

            var ribbonTabItemsWithGroups = this.InternalChildren.OfType<RibbonTabItem>()
                                               .Where(item => item.Group != null);

            var ribbonTitleBar = ribbonTabItemsWithGroups.Select(ribbonTabItemsWithGroup => ribbonTabItemsWithGroup.Group.Parent)
                                                         .OfType<RibbonTitleBar>()
                                                         .FirstOrDefault();

            if (ribbonTitleBar != null)
            {
                ribbonTitleBar.InvalidateMeasure();
            }

            return finalSize;
        }
person redtetrahedron    schedule 23.05.2013