WP8.1中的XAML:子元素样式

时间:2014-12-03 11:27:00

标签: wpf xaml windows-phone-8.1 elements children

我有一个GridTextBlock。我想在TextBlock内设置所有Grid的样式。所以我这样做:

<Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="1*" />
        <ColumnDefinition Width="1*" />
    </Grid.ColumnDefinitions>
    <Grid.Resources>
        <Style TargetType="TextBlock">
            <Setter Property="Margin" Value="0,0,0,15" />
        </Style>
    </Grid.Resources>

    <StackPanel Grid.Column="0">
        <TextBlock Text="myText" Style="{StaticResource TitleTextBlockStyle}" />
        <TextBlock Text="myText" Style="{StaticResource TitleTextBlockStyle}" />
    </StackPanel>

    <StackPanel Grid.Column="1">
        <TextBlock Text="123456" Style="{StaticResource TitleTextBlockStyle}" Foreground="{ThemeResource PhoneAccentBrush}" />
        <TextBlock Text="123456" Style="{StaticResource TitleTextBlockStyle}" Foreground="{ThemeResource PhoneAccentBrush}" />
    </StackPanel>

</Grid>

1)它不起作用。 TextBlock没有得到任何Margins。为什么呢?

2)如何在Style代码中设置Foreground s的TextBlock<Grid.Resources>属性?

2 个答案:

答案 0 :(得分:3)

1)它不起作用。 TextBlocks没有任何边距。为什么?

它无效,因为您将样式“TitleTextBlockStyle”分配给TextBlocks。因此,您在Grid.Resources中定义的隐式样式无法发挥作用。从Style="{StaticResource TitleTextBlockStyle}"中删除TextBlock部分,您的边距将会出现。

2)如何在TextBlock代码中设置<Grid.Resources> s的样式和前景属性?

和你设置其他所有内容一样:

<Setter Property="Foreground" Value="AliceBlue"/>

或者如果你有更复杂的画笔:

    <Setter Property="Foreground">
       <Setter.Value>
        <!-- Whatever brush you want -->
       <Setter.Value/>
    </Setter>

我假设使用“设置TextBlocks的样式属性”,您实际上希望您的新样式从已定义的样式继承。在这种情况下,您可以将新样式基于现有样式:

        <Style TargetType="TextBlock"
               BasedOn="{StaticResource StyleToInheritFrom}">

或者,在您的情况下,大概是:

    <Style TargetType="TextBlock" BasedOn="{StaticResource TitleTextBlockStyle}">
        <Setter Property="Margin" Value="0,0,0,15" />
    </Style>

完整的东西看起来像:

<Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="1*" />
        <ColumnDefinition Width="1*" />
    </Grid.ColumnDefinitions>
    <Grid.Resources>
        <Style TargetType="TextBlock" BasedOn="{StaticResource TitleTextBlockStyle}">
            <Setter Property="Margin" Value="0,0,0,15" />
            <Setter Property="Foreground" Value="{ThemeResource PhoneAccentBrush}"/>
        </Style>
    </Grid.Resources>

    <StackPanel Grid.Column="0">
        <TextBlock Text="myText" />
        <TextBlock Text="myText" />
    </StackPanel>

    <StackPanel Grid.Column="1">
        <TextBlock Text="123456" />
        <TextBlock Text="123456" />
    </StackPanel>

</Grid

答案 1 :(得分:0)

您在寻找什么样的利润?如果您正在寻找左右边距,则由于您的保证金声明。声明如下:

<object Margin="left,top,right,bottom"/>
- or -
<object Margin="left,top"/>
- or -
<object Margin="thicknessReference"/>

现在,你只是添加一个底部边距。你也可以添加

保证金= “15”

将被解释为厚度参考并将所有值设置为15