Как сделать текст группового блока жирным шрифтом, но не текст элементов управления, содержащихся в нем? - PullRequest
15 голосов
/ 17 февраля 2012

Я пошел и создал вкладку, содержащую большое количество элементов управления, большинство из которых содержатся в так называемом групповом блоке верхнего уровня.Теперь я решил, что текст группы верхнего уровня должен быть жирным, но не более того.Однако когда я установил шрифт верхнего блока группы на полужирный, все элементы управления, содержащиеся в нем, также стали жирными, чего я не хочу.Я могу установить свойство bold каждого отдельного элемента управления в false, но, похоже, для этого должен быть более простой способ.Любые идеи?

Я, вероятно, упускаю что-то очевидное, например, свойство групповой рамки, которое смотрит мне в лицо - и извиняюсь, если это так.аванс за любую помощь.

Ответы [ 4 ]

26 голосов
/ 17 февраля 2012

Вы могли бы обойти проблему, поместив ярлык над заголовком для GroupBox, но я бы не обязательно рекомендовал это.

Появляется лучшее решениекак только вы понимаете, что происходит и почему это происходит.Проблема заключается в том, что шрифт элемента управления (помимо прочего) является свойством ambient , что означает, что дочерние элементы управления наследуют свойства своих родительских / контейнерных элементов управления.Поэтому, если вы установите GroupBox для использования полужирного шрифта, все его дочерние элементы управления автоматически наследуют свойство полужирного шрифта по умолчанию.

Ключ, конечно, есть по умолчанию.Свойства окружения применяются только в том случае, если вы явно не устанавливаете свойства дочерних элементов как-то иначе.Если вы не хотите, чтобы дочерние элементы управления были выделены жирным шрифтом, выберите их все и отключите полужирный.Настройки родительского / контейнера больше не будут переопределять новые пользовательские настройки.

Чтобы упростить задачу, вы можете добавить элемент управления Panel в свой GroupBox, закрепить / закрепить его, чтобы заполнить всю клиентскую областьЭлемент управления GroupBox и установите для него использование стандартного шрифта, не выделенного жирным шрифтом.Тогда правила внешних элементов управления предусматривают, что дочерние элементы управления, которые вы добавляете в Panel, по умолчанию будут , а не .Таким образом, вам нужно всего лишь изменить свойство шрифта одного элемента управления в отличие от каждого дочернего элемента управления, который вы добавляете в GroupBox.

Причина, по которой это лучше, чем попытка добавитьЭлемент управления надписью над надписью GroupBox состоит в том, что GroupBox разработан для того, чтобы содержать элементы управления.Вы можете воспользоваться преимуществами свойств закрепления и привязки, чтобы убедиться, что все организовано правильно, и вам не придется сражаться с дизайнером, чтобы убедиться, что ваша пользовательская метка правильно закрывает метку по умолчанию, нарисованную элементом управления GroupBox.,Кроме того, вы не столкнетесь с проблемами Z-порядка или с другими проблемами перерисовки, которые вынуждают уродливые головы во время выполнения, когда, например, элемент управления Label случайно скрывается за GroupBox, и никто его не видит (имножество других потенциальных snafus).

1 голос
/ 12 августа 2015

Я наткнулся на этот старый вопрос при поиске того же самого и понял, что его можно решить в коде, не добавляя отдельный элемент управления, просто чтобы преодолеть проблему окружения, которую Код Грей упоминает в своем ответе.

Добавьте расширения в модуль следующим образом:

<Extension()>
Public Sub UnBold(Of T As Control)(cc As Control.ControlCollection)
    For Each c As Control In cc
        If Not TypeOf c Is T AndAlso c.GetType.GetProperty("Font") IsNot Nothing Then
            Dim RegularFont As New Font(c.Font.FontFamily, c.Font.Size, FontStyle.Regular)
            c.Font = RegularFont
        ElseIf c.HasChildren Then
            UnBold(Of T)(c.Controls)
        End If
    Next
End Sub

Затем отмените выделение всех элементов управления во всех GroupBox формах (включая любого дочернего элемента GroupBox), используя следующее в событии OnLoad формы:

Me.Controls.UnBold(Of GroupBox)()

Или для всех элементов управления в одном GroupBox (опять же, включая любого дочернего элемента GroupBox es):

MySpecificGroupBox.UnBold(Of GroupBox)()

При условии, что если вы действительно хотите, чтобы контроль внутри GroupBox действительно оставался ободренным, вам придется установить это в коде после вызова расширения.

0 голосов
/ 11 сентября 2018

Поместите все свои элементы управления в ContentControl и сбросьте параметры шрифта

   <GroupBox Header="Group" FontSize="16" FontWeight="Bold">
       <ContentControl Margin="0" FontSize="12" FontWeight="Regular">
   ...
   ...
   ...
       </ContentControl>
   </GroupBox>
0 голосов
/ 17 февраля 2012

Попробуйте обойти проблему, поместив метку над текстовой областью GroupBox и сделав шрифт метки жирным.

Я сделал это один раз и даже использовал CheckBox (для включения / отключения всей группы).Работал как шарм.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...