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>