如何在 C# 中设置元素及其所有子元素的文本颜色和样式

Posted

技术标签:

【中文标题】如何在 C# 中设置元素及其所有子元素的文本颜色和样式【英文标题】:How can I set the text color and style of an elements and all its children in C# 【发布时间】:2018-11-11 06:18:41 【问题描述】:

我有这个代码:

<StackLayout x:Name="OuterSL" >
   <StackLayout.Resources>
      <Style TargetType="Label">
         <Setter Property="TextColor" Value="Red" />
         <Setter Property="Style" Value="StaticResource HelpDetail" />
      </Style>
   </StackLayout.Resources>
   <Label Text="Overview" />
   <Grid >
      <Grid.Resources>
         <Style TargetType="Label">
            <Setter Property="TextColor" Value="Red" />
            <Setter Property="Style" Value="StaticResource HelpDetail" />
         </Style>
     </Grid.Resources>

谁能告诉我如何在后端 C# 中设置 TextColor 和 Style。我特别想为这里的所有孩子做这件事。所以我需要找到所有属于 StackLayout 的网格,并为它们设置文本和样式。请注意,例如,我只是给出了代码的 sn-p。在实际代码中,我在 StackLayout 中有许多网格,并且我在它们中设置了资源。另外我不想在页面内容级别进行设置。只是 StackLayout 中名为 OuterSL 的所有内容。

【问题讨论】:

【参考方案1】:

每个布局控件(Grid/Stacklayout/...)都有一个 Children 属性(视图列表),这些子项也可以是布局容器(或不是),因此如果您递归地降低视图层次结构,您可以分配根据需要为所有视图元素设置样式和颜色...

这应该可以帮助您入门。

void SetStyles(IList<View> children, Style style)

  foreach (var child in children)
  
    switch (child)
    
        case StackLayout s:
            child.Style = style;
            if (s.Children.Count > 0)
                SetStyles(s.Children, style);
            break;
        case Grid g:
            if (g.Children.Count > 0)
                SetStyles(g.Children, style);
            break;
        case Entry e:
            e.TextColor = Color.Red;
            break;
        case Label l:
            l.TextColor = Color.Green;
            break;
        ~~~
    

 

就这样称呼它:

if (Application.Current.Resources.TryGetValue("SomeStackLayoutStyle", out object style))

    SetStyles(someStackLayout.Children, Style(style));

【讨论】:

以上是关于如何在 C# 中设置元素及其所有子元素的文本颜色和样式的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Select 元素中设置所选项目的背景颜色?

flex布局常见用法小结

可以在关键帧中设置子元素的属性吗

如何以编程方式在所有应用程序中设置上部文本?

Jquery中设置样式属性

如何在 Bootstrap 4 和 Sass 中设置自定义按钮文本颜色?