如何在 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# 中设置元素及其所有子元素的文本颜色和样式的主要内容,如果未能解决你的问题,请参考以下文章