2011-03-21 234 views
2

我已经定义了键入的文本块样式(而不是有一个键值),以便它适用于所有文本块。为WPF中的contentpresenter改写输入的文本块样式

<Style TargetType="{x:Type TextBlock}"> 
     <Setter Property="FontFamily" Value="MyFancyFont"/> 
     <Setter Property="FontSize" Value="13.333" /> 
     <Setter Property="Foreground" Value="Gray" /> 
</Style> 

现在我有一个,比如说,树型视图,我想它时,它的选择显示为蓝色背景和白色前景对黑暗的背景。

<!--part of the treeviewitem template--> 
<Trigger Property="IsSelected" Value="true"> 
    <Setter Property="Foreground" Value="White"/> 
    <Setter Property="Background" Value="Black"/> 
</Trigger> 

定义的文本块本地风格选择的TreeView项时的情况不工作,作为项目的文本块仍然拿起类型样式。

有没有一种很好的方法来做到这一点,同时仍然保持文本块样式为“Typed”?

回答

3

this问题可能会对您有所帮助。它显示如何覆盖隐式样式。

好吧,我明白你的问题,我真的没有直接的解决方案,但不管怎样,我会告诉你我是如何处理这样的事情:

你知道,这隐含样式作用域,这意味着:

<Grid> 
     <Grid.Resources> 
      <Style TargetType="{x:Type TextBlock}"> 
       <Setter Property="FontFamily" Value="MyFancyFont"/> 
      </Style> 
     </Grid.Resources> 
     <TextBlock>textblock with MyFancyFont</TextBlock>   
    </Grid> 
    <TextBlock>textblock with normal font</TextBlock> 

我通常尝试在我的主窗口的资源中避免TextBlock的这种隐式样式。相反,我可能会做:

<Application bunch="ofStuff"> 
    <Application.Resources> 
     <Style TargetType="{x:Type TextBlock}" x:Key="TextBlockStandardStyle"> 
      <Setter Property="FontFamily" Value="MyFancyFont"/> 
     </Style> 
    </Application.Resources> 
</Application> 

然后在分区那里这种风格可以是隐式的,不会造成任何伤害,我会写:

<Grid> 
     <Grid.Resources> 
      <Style TargetType="{x:Type TextBlock}" BasedOn="{StaticResource TextBlockStandardStyle}"/>    
     </Grid.Resources> 
     <TextBlock>textblock with MyFancyFont</TextBlock>   
    </Grid> 

这样我可以范围的事情,我怎么想。也许这种方法可以让你跳过树视图的隐式样式,这样你就可以使用触发器!

+0

感谢您的链接。我试图做它说的,但它似乎不工作。在我的情况下,我不确定treeviewitem是否为类型字符串生成模板。我觉得默认的模板都有一个图标,内容主持人和网格内itemspresenter ... – mobileTofu 2011-03-21 20:22:18

+0

所以基本上,如果我直接设置标题是这样的: <树型视图标题=“收件箱” /> 在后的作品中描述的的DataTemplate 。当我指定的东西比头一个字符串别的,像图标加上一些文字图像这是行不通的。如果该项目具有子项目(在标题字符串旁边有一个“加号”),它也不起作用。 – mobileTofu 2011-03-22 01:27:53

+0

@mobileTofu请看我的更新,希望有任何帮助! – 2011-03-22 11:14:25