DevExpress WinForms: лента BarButtonGroup теряет визуальную группировку, когда для кнопок выравнивания SpreadsheetControC#

Место общения программистов C#
Ответить
Anonymous
 DevExpress WinForms: лента BarButtonGroup теряет визуальную группировку, когда для кнопок выравнивания SpreadsheetContro

Сообщение Anonymous »

Я работаю с DevExpress WinForms SpreadsheetControl (v23.2) и создаю собственную ленту. У меня есть SpreadsheetBarController, связанный с элементом управления для автоматического обновления состояний кнопок.
Я хочу, чтобы кнопки горизонтального выравнивания (слева, по центру, справа) вели себя как Excel:
  • Они должны действовать как взаимоисключающая группа переключателей (можно отметить только 1).
  • При выборе их можно все снять. ячейка имеет выравнивание «Общее».
  • Они должны визуально выглядеть как единый сегментированный элемент управления (объединенные границы внутри BarButtonGroup).
Проблема: Чтобы добиться взаимной исключительности и визуально объединить границы, я установил GroupIndex для всех кнопок в группе. Однако GroupIndex заставляет хотя бы одну кнопку оставаться отмеченной, что неверно для выравнивания ячеек «Общее». Чтобы это исправить, я добавил AllowAllUp = true. Это исправляет логику (все кнопки можно снять), но нарушает визуальный стиль. Оболочка WXI перестает отображать их как сегментированный элемент управления и рисует отдельные несвязанные границы для каждой кнопки.
Вот код, который я использую для назначения свойств GroupIndex и AllowAllUp моим сгенерированным кнопкам выравнивания:

Код: Выделить всё

private void SetupAlignmentButtons()
{
// horzCmds contains: "FormatAlignmentLeft", "FormatAlignmentCenter", "FormatAlignmentRight"
var horzCmds = new List { "FormatAlignmentLeft", "FormatAlignmentCenter", "FormatAlignmentRight" };

foreach (RibbonPageGroup group in ribbonPage1.Groups)
{
foreach (BarItemLink link in group.ItemLinks)
{
if (link.Item is BarButtonGroup btnGroup)
{
foreach (BarItemLink subLink in btnGroup.ItemLinks)
{
if (subLink.Item is DevExpress.XtraSpreadsheet.UI.SpreadsheetCommandBarButtonItem cmdBtn)
{
if (horzCmds.Contains(cmdBtn.CommandName))
{
cmdBtn.GroupIndex = 202;
cmdBtn.AllowAllUp = true;
}
}
}
}
}
}
}
Как сохранить объединенный/сегментированный внешний вид BarButtonGroup, разрешив при этом AllowAllUp = true, чтобы SpreadsheetBarController мог снять флажки со всех кнопок, когда ячейка имеет общее выравнивание? Существует ли конкретное свойство или обходной путь для оболочки WXI?
Вот на что я надеюсь:
Изображение

И на чем я застрял:
Изображение
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»