将样式应用于作为StackPanel子项的所有TextBlock

时间:2014-03-07 14:56:34

标签: wpf silverlight xaml

假设我的布局如下:

<Grid>

    <TextBlock........ />
    <StackPanel>
        <TextBlock ...../>
        <!--Other Elements-->
    </StackPanel>

    <TextBlock........ />
    <StackPanel>
        <TextBlock ...../>
        <!--Other Elements-->
    </StackPanel>

    <TextBlock........ />
    <StackPanel>
        <TextBlock ...../>
        <!--Other Elements-->
    </StackPanel>

</Grid>

现在我想在上面提到的布局中将类似下面的样式应用到StackPanel的子节点的所有文本块。

<Style TargetType={x:Type TextBlock}>
    <Setter Property="FontSize" Value="20" />
<Style>

1 个答案:

答案 0 :(得分:6)

第一种方法:

示例1:

 <Window.Resources>
    <Style TargetType="StackPanel">
        <Style.Resources>
            <Style TargetType="TextBlock">
                <Setter Property="FontSize" Value="20" />                    
            </Style>
        </Style.Resources>
    </Style>
</Window.Resources>

 <StackPanel>
     <TextBlock/>                
 </StackPanel>           
 <StackPanel>
     <TextBlock />                
 </StackPanel>

示例2:如果您想要特定网格中的textblock-stackpanel

<Window.Resources>
    <Style x:Key="Textblockstyle" TargetType="Grid">
        <Style.Resources>
            <Style TargetType="StackPanel">
                <Style.Resources>
                    <Style TargetType="TextBlock">
                        <Setter Property="FontSize" Value="20" />
                        <Setter Property="Foreground" Value="Green"/>
                    </Style>
                </Style.Resources>
            </Style>
        </Style.Resources>
    </Style>
</Window.Resources>

<Grid>
    <StackPanel Height="100" VerticalAlignment="top" Width="100">
        <TextBlock Text="Another Grid" />
    </StackPanel>
    <Grid Style="{StaticResource Textblockstyle}">
        <StackPanel Height="100" HorizontalAlignment="Left" Width="100">
            <TextBlock Text="Textblock1" />
        </StackPanel>
        <StackPanel Height="100" HorizontalAlignment="Right" Width="100">
            <TextBlock Text="Textblock2"/>
        </StackPanel>
    </Grid>
</Grid>

第二种方法:为stackpanel中的每个文本块指定样式名称

<Window.Resources>
    <Style x:Key="Textblockstyle" TargetType="TextBlock">
        <Setter Property="FontSize" Value="20" />
        <Setter Property="Foreground" Value="Green"/>
    </Style>
</Window.Resources>

 <StackPanel>
    <TextBlock Text="abc" Style="{StaticResource Textblockstyle}"/>
   <!--Other Elements-->
 </StackPanel>