TextBlock样式无法应用于HeaderedItemsControl的ItemsPresenter中文本框问题
解决HeaderedItemsControl内容区域TextBlock样式不生效的问题
这个问题我之前也碰到过,核心原因其实是带x:Key的样式属于显式样式,不会自动应用到目标类型的控件上——除非你主动引用它。你的Header里的TextBlock能生效,大概率是你在Header的模板或者控件里显式指定了这个样式,但内容区域的ItemsPresenter里的TextBlock没被主动关联,所以没生效。
下面给你几个可行的解决方案:
方案一:将样式改为隐式样式(最省心)
移除样式的x:Key属性,这样该作用域内的所有TextBlock都会自动应用这个样式。如果只想让样式作用于当前的HeaderedItemsControl内部,把样式放在它的Resources里即可:
<Style TargetType="HeaderedItemsControl"> <Setter Property="Resources"> <ResourceDictionary> <Style TargetType="TextBlock"> <Setter Property="TextWrapping" Value="Wrap"/> <Setter Property="Padding" Value="2.5,5,10,2.5"/> </Style> </ResourceDictionary> </Setter> <!-- 其他Setter、模板定义等 --> </Style>
这样不管是Header还是内容区域的TextBlock,都会自动继承这个样式。
方案二:保留x:Key,在ItemTemplate中显式引用
如果需要保留StructuredViewText这个样式Key(比如其他地方也要复用),那你需要在项模板里给TextBlock明确指定样式:
<HeaderedItemsControl ItemsSource="{Binding YourItemCollection}"> <!-- Header部分 --> <HeaderedItemsControl.Header> <!-- 这里的TextBlock能生效是因为可能显式引用了样式 --> <TextBlock Text="My Header" Style="{StaticResource StructuredViewText}"/> </HeaderedItemsControl.Header> <!-- 内容区域的项模板,显式引用样式 --> <HeaderedItemsControl.ItemTemplate> <DataTemplate> <TextBlock Text="{Binding YourTextProperty}" Style="{StaticResource StructuredViewText}"/> </DataTemplate> </HeaderedItemsControl.ItemTemplate> </HeaderedItemsControl>
方案三:通过ItemContainerStyle间接应用
如果你的项容器是ContentPresenter(HeaderedItemsControl默认的项容器),可以在ItemContainerStyle里给容器的Resources添加隐式样式,让容器内的TextBlock自动应用目标样式:
<Style TargetType="HeaderedItemsControl"> <Setter Property="ItemContainerStyle"> <Style TargetType="ContentPresenter"> <Setter Property="Resources"> <ResourceDictionary> <!-- 基于已有显式样式创建隐式样式 --> <Style TargetType="TextBlock" BasedOn="{StaticResource StructuredViewText}"/> </ResourceDictionary> </Setter> </Style> </Setter> <!-- 其他模板设置 --> </Style>
内容的提问来源于stack exchange,提问作者Ruben Bohnet
相关产品推荐
相关产品推荐

