Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wpf 文本框样式不应用于ItemsPresenter文本框_Wpf_Itemscontrol_Textblock - Fatal编程技术网

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

Wpf 文本框样式不应用于ItemsPresenter文本框,wpf,itemscontrol,textblock,Wpf,Itemscontrol,Textblock,我尝试将样式应用于HeaderedItemsControl的ItemsPresenter中的所有文本框。它在控件的标题中工作得完美无缺,但不知怎的,它与它的内容无关 以下是TextBlock样式: <Style TargetType="TextBlock" x:Key="StructuredViewText"> <Setter Property="TextWrapping" Value="Wrap"/> <Setter Property="Pad

我尝试将样式应用于
HeaderedItemsControl
ItemsPresenter
中的所有文本框。它在控件的标题中工作得完美无缺,但不知怎的,它与它的内容无关

以下是
TextBlock
样式:

<Style TargetType="TextBlock" x:Key="StructuredViewText">
     <Setter Property="TextWrapping" Value="Wrap"/>
     <Setter Property="Padding" Value="2.5,5,10,2.5"/>
</Style>
下面是如何使用
HeaderedItemControl

<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>  

在此之后,将在运行应用程序时对样式进行评估。

更多信息来自。

我认为您应该按照自己的风格分配
ItemTemplate
。谢谢您的建议,但它似乎不起作用。示例中也没有提到headered Items控件,它实际上只是一个带有标题的Items控件。itemscontrol将有一个itemtemplate。大多数开发人员从未直接使用过一个,但会更加熟悉菜单和树视图。它们有一个神秘的标题属性,当然还有它们各自项目中的子项目。我刚刚意识到你是如何使用它的。当您将textblock直接作为项目放入其中时,您没有将数据模板化到控件中以提供该textblock,因此不会涉及itemtemplate。如果您的项目都是
textblock
s,则您可以将
itemtemplate
定义为textblock,然后在该DataTemplate中显式分配样式。这是因为
DataTemplate
在编译时不是
VisualTree
的一部分,因此样式不会立即应用。嘿,伙计,很抱歉再次打扰你,但是如果我像你的示例中那样添加文本,文本就会消失……嘿,np。您可能需要将
ContentPresenter
添加到
DataTemplate
中,就像您为
Template
@XAMIMAX设置
样式一样。在某种程度上,我问我经验丰富的WPF同事我的总体结构是否有意义。你知道这是怎么回事,如果事情太难,很可能你遇到了错误的问题。他鼓励我放弃以用户界面为中心的结构,将其组织得更加以数据为中心。和中一样,不要编写使用网格的模板、编写使用节点的模板等。到目前为止,我可以删除我非常臃肿的xaml文件的一半。我还重新组织了我的viewmodel,使用组合而不是继承,慢慢地,我的可视化变得不再让我感到尴尬……WPF有一个陡峭的学习曲线。但这是我们都经历过的事情。我不确定你说的模板是什么意思,用节点代替网格,我希望你说的是“使用”。当您完成并显示最终代码时,请告知我们。我相信会有更多的人想看看你做了什么。我肯定会这么做的。谢谢你的积极支持!希望我在某个时候有足够的知识来回报你的帮助。
<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>