文本框样式不会应用于ItemsPresenter文本框

时间:2018-04-09 08:41:21

标签: wpf itemscontrol textblock

我尝试将样式应用于HeaderedItemsControl的{​​{1}}中的所有文本框。它在控件的标题内完美无瑕,但不知何故没有内容。

以下是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>

提前致谢!

1 个答案:

答案 0 :(得分:1)

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

<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的更多信息。