在XAML(Silverlight,WP)中为Grid中所有TextBlock设置前景色的一个地方。

5
假设我们有这样一个结构:
<Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition />
        <ColumnDefinition />
    </Grid.ColumnDefinitions>
    <Grid.RowDefinitions>
        <RowDefinition />
        <RowDefinition />
        <RowDefinition />
    </Grid.RowDefinitions>

    <TextBlock Grid.Row="0" Grid.Column="0" />
    <TextBlock Grid.Row="0" Grid.Column="1" />

    <TextBlock Grid.Row="1" Grid.Column="0" />
    <TextBlock Grid.Row="1" Grid.Column="1" />

    <TextBlock Grid.Row="2" Grid.Column="0" />
    <TextBlock Grid.Row="2" Grid.Column="1" />
</Grid>

如何为网格中的所有文本块设置前景色作为一个设置?
类似于:

<Grid Color="Red">
     ...
</Grid>
2个回答

7
您可以在网格上添加一个资源,将所有TextBlock的前景色设置为红色。
<Grid>
    <Grid.Resources>
        <Style TargetType="TextBlock">
            <Setter Property="Foreground" Value="Red"/>
        </Style>
    </Grid.Resources>
    <Grid.ColumnDefinitions>
        <ColumnDefinition />
        <ColumnDefinition />
    </Grid.ColumnDefinitions>
    <Grid.RowDefinitions>
        <RowDefinition />
        <RowDefinition />
        <RowDefinition />
    </Grid.RowDefinitions>

    <TextBlock Grid.Row="0" Grid.Column="0" >Good show</TextBlock>
    <TextBlock Grid.Row="0" Grid.Column="1" >Now the Foreground is red</TextBlock>

    <TextBlock Grid.Row="1" Grid.Column="0" />
    <TextBlock Grid.Row="1" Grid.Column="1" />

    <TextBlock Grid.Row="2" Grid.Column="0" />
    <TextBlock Grid.Row="2" Grid.Column="1" />
</Grid>

谢谢,它有效。但在我的真实应用程序中,一些TextBlock应用了另一种样式,这个颜色设置并没有被使用。 - TecMan

5

作为@Onosa的回答的替代方案,Foreground是那些在可视树下继承的依赖属性之一。所以你也可以将你的Grid包装在任何Control的子类中,例如ContentControl

<ContentControl Foreground="Red">
    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition />
            <ColumnDefinition />
        </Grid.ColumnDefinitions>
        <Grid.RowDefinitions>
            <RowDefinition />
            <RowDefinition />
            <RowDefinition />
        </Grid.RowDefinitions>

        <TextBlock Grid.Row="0" Grid.Column="0" />
        <TextBlock Grid.Row="0" Grid.Column="1" />

        <TextBlock Grid.Row="1" Grid.Column="0" />
        <TextBlock Grid.Row="1" Grid.Column="1" />

        <TextBlock Grid.Row="2" Grid.Column="0" />
        <TextBlock Grid.Row="2" Grid.Column="1" />
    </Grid>
</ContentControl>

是的,这比Onosa的答案更好 - 请看我的评论为什么。 - TecMan
我不知道这个。谢谢你分享。@TecMan,如果你把这个标记为答案而不是我的话,我也不会介意。 - Onosa
3
@Onosa,这是我的错,因为我将我的真实XAML代码简化到最小以提出一个简洁的问题。如果我们看我的问题,你的答案是100%正确的。 - TecMan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接