文本框样式未应用于 ItemsPresenter 文本框

Textbox Style does not get applied to ItemsPresenter Textboxes

我尝试将样式应用于 HeaderedItemsControlItemsPresenter 中的所有文本框。它在控件的 header 中完美运行,但不知何故与其内容无关。

这里是 TextBlock 样式:

<Style TargetType="TextBlock" x:Key="StructuredViewText">
     <Setter Property="TextWrapping" Value="Wrap"/>
     <Setter Property="Padding" Value="2.5,5,10,2.5"/>
</Style>

这是 HeaderedItemsControl 的样式:

<Style TargetType="HeaderedItemsControl">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type HeaderedItemsControl}">
                <StackPanel>
                    <Grid>
                        <Rectangle Fill="{TemplateBinding Background}"/>
                        <ContentPresenter ContentSource="Header">
                            <ContentPresenter.Resources>
                                <Style TargetType="{x:Type TextBlock}" BasedOn="{StaticResource StructuredViewText}"/>
                            </ContentPresenter.Resources>
                        </ContentPresenter>
                    </Grid>
                    <Grid>
                        <Grid.Resources>
                            <Style TargetType="{x:Type TextBlock}" BasedOn="{StaticResource StructuredViewText}"/>
                        </Grid.Resources>
                        <Rectangle Stroke="{TemplateBinding BorderBrush}"/>
                        <ItemsPresenter Margin="2,0,0,0">
                            <ItemsPresenter.Resources>
                                <Style TargetType="{x:Type TextBlock}" BasedOn="{StaticResource StructuredViewText}"/>
                            </ItemsPresenter.Resources>
                        </ItemsPresenter>
                    </Grid>
                </StackPanel>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
    <Setter Property="ItemsPanel">
        <Setter.Value>
            <ItemsPanelTemplate>
                <StackPanel MaxWidth="300"/>
            </ItemsPanelTemplate>
        </Setter.Value>
    </Setter>
</Style>

下面是 HeaderedItemsControl 的用法:

<HierarchicalDataTemplate DataType="{x:Type this:StructuredViewNode}" ItemsSource="{Binding Children}">
    <Grid>
        <Grid.Resources>
            <Style TargetType="Border" >
                <Setter Property="Padding" Value="50" />
            </Style>
        </Grid.Resources>

        <!-- Beschreibung -->
        <HeaderedItemsControl Header="Beschreibung">
            <TextBlock Text="{Binding Description}"/>
        </HeaderedItemsControl>

    </Grid>
</HierarchicalDataTemplate>

提前致谢!

您的模板在当前解决方案中不起作用的原因是因为它在编译时不是可视化树的一部分。因此,样式将不会被应用。这仅在您像这样在模板中明确指定样式时才有效:

<HierarchicalDataTemplate DataType="{x:Type this:StructuredViewNode}" ItemsSource="{Binding Children}">
    <Grid>
        <Grid.Resources>
            <Style TargetType="Border" >
                <Setter Property="Padding" Value="50" />
            </Style>
        </Grid.Resources>

        <!-- Beschreibung -->
        <HeaderedItemsControl Header="Beschreibung">
            <HeaderedItemsControl.ItemTemplate>
                <DataTemplate>
                    <TextBlock Text="{Binding Description}" Style="{StaticResource StructuredViewText}"/>
                </DataTemplate>
            </HeaderedItemsControl.ItemTemplate>
        </HeaderedItemsControl>

    </Grid>
</HierarchicalDataTemplate>  

在此之后,当您 运行 应用程序时,样式将得到评估。
更多信息来自 MSDN.