直接子级的样式

Styling for direct children

给出这个例子XAML:

<TabControl>
    <TabItem Header="Test">
        <Grid> <!-- outer grid that should receive the styles -->
            <Grid.RowDefinitions><!-- ... --></Grid.RowDefinitions>
            <Grid.ColumnDefinitions><!-- ... --></Grid.ColumnDefinitions>
            <Grid Grid.Row="1" Grid.Column="1">
                <!-- inner grid, should NOT receive the styles -->
            </Grid>
        </Grid>
    </TabItem>
</TabControl>

如何为 TabItem 的所有直接 Grid 子级设置样式,而不设置层次结构中更深层的其他 Grid 的子级?

这是我尝试过的(我把它放在 App.xml 中):

<Style TargetType="TabItem">
    <Style.Resources>
        <Style TargetType="Grid">
            <Setter Property="Margin" Value="10" />
        </Style>
    </Style.Resources>
</Style>

(我知道我可以使用 Style={StaticResource ...} 分配某些样式,但我必须将它单独应用于所有 Grid,这似乎有很多不必要的代码......)

How can I style all direct Grid children of the TabItem and no other Grid's deeper in the hierarchy?

通过以一种或另一种方式为所有外部 Grid 元素显式设置 Style 属性。

例如,您可以创建一个自定义 Grid 类型,将 Style 应用于:

public class OuterGrid : Grid { }

XAML:

<Style TargetType="local:OuterGrid">
    <Setter Property="Margin" Value="10" />
</Style>
...
<local:OuterGrid>
    <!-- outer grid that should receive the styles -->
    <Grid Grid.Row="1" Grid.Column="1">
        <!-- inner grid, should NOT receive the styles -->
        <TextBlock>inner</TextBlock>
    </Grid>
</local:OuterGrid>

或指定自定义的默认值 Grid 而不使用 Style:

public class OuterGrid : Grid
{
    public OuterGrid()
    {
        Margin = new Thickness(10);
    }
}

恐怕XAML中没有CSS子选择器(>)的概念。