如何将组框的文本加粗,但不包含其中包含的控件文本?

时间:2012-02-17 01:32:00

标签: vb.net winforms user-controls containers

我去创建了一个包含大量控件的选项卡,其中大部分都包含在我称之为顶级组框的内容中。现在我决定我希望顶级组框的文本是粗体,但没有别的。但是,当我将顶级组框的字体设置为粗体时,其中包含的所有控件也会变为粗体,这是我不想要的。我可以将每个单独控件的粗体属性设置为false,但似乎应该有一种更简单的方法来执行此操作。有什么想法吗?

我可能会遗漏一些显而易见的东西,比如正在盯着我看的群组物业 - 如果事实证明是这样的话,我会道歉。

提前感谢您的帮助。

4 个答案:

答案 0 :(得分:26)

可能通过在GroupBox的标题上放置标签来绕过问题,但我不一定推荐

一旦您了解了正在发生的事情及其发生的原因,就会出现更好的解决方案。问题是控件的字体(以及其他内容)是 ambient 属性,这意味着子控件继承其父/容器控件的属性。因此,如果将GroupBox设置为使用粗体字体,则默认情况下,其所有子控件都会自动继承粗体属性。

当然,关键是默认情况下。仅当您未将子项的属性显式设置为其他项时,环境属性才适用。如果您不希望子控件变为粗体,请全部选中它们并关闭粗体。父/容器的设置将不再覆盖新的自定义设置。

为了使事情变得更加简单,您可以将Panel控件添加到GroupBox,停靠/锚定它以填充GroupBox控件的整个客户区域,并将其设置为使用标准的非粗体字体。然后,环境控制规则规定,您添加到Panel的子控件默认情况下是粗体。这样,您只需更改一个控件的字体属性,而不是添加到GroupBox的每个子控件。

这比尝试在GroupBox标题上添加Label控件更好的原因是因为GroupBox被设计为包含控件。您可以利用对接和锚定属性来确保所有内容都正确排列,并且您不必在这样做时与设计师对抗,以确保自定义Label正确覆盖GroupBox控件绘制的默认标签。此外,您不会遇到Z顺序问题或者在运行时遇到其他重绘问题,例如,Label控件被意外隐藏隐藏在 GroupBox之后,没有人能看到它(和许多其他潜在的混乱)。

答案 1 :(得分:1)

我在搜索相同内容时遇到了这个老问题,并意识到它可以在代码中解决而无需添加单独的控件来克服Code Gray在其答案中提到的环境问题。

在模块中添加扩展名,如下所示:

GroupBox

然后在表单GroupBox事件中使用以下内容,在表单(包括任何子OnLoad es)上的所有Me.Controls.UnBold(Of GroupBox)() es中取消所有控件的展开:< / p>

GroupBox

或单个GroupBox中的所有控件(同样,包括任何子MySpecificGroupBox.UnBold(Of GroupBox)() es):

GroupBox

附带条件是,如果你真的希望在{{1}}内实际控制 ,那么你必须在调用扩展程序后在代码中设置它。

答案 2 :(得分:0)

考虑通过在GroupBox的文本区域上放置标签并使标签的字体变为粗体来绕过问题。

我做了一次,甚至使用了CheckBox(用于启用/禁用整个组)。工作就像一个魅力。

答案 3 :(得分:0)

将所有控件放在ContentControl内,然后重置字体参数

   <GroupBox Header="Group" FontSize="16" FontWeight="Bold">
       <ContentControl Margin="0" FontSize="12" FontWeight="Regular">
   ...
   ...
   ...
       </ContentControl>
   </GroupBox>