2014-12-22 44 views
0

我们试图为我们所做的自定义文本块控件创建隐式样式。
此自定义控件基于文本块并添加了一些DP和逻辑。
当我们在本地使用风格时,一切正常。另外,当我们给这个风格一个键时,它也可以工作。自定义控件文本框和隐式样式

这是自定义控制inheritince代码:

public class HighlightTextBlock : TextBlock 

,这就是风格:

<Style TargetType="UI:HighlightTextBlock" 
     x:Name="LocalHighlightTextBlockStyle" 
     BasedOn="{StaticResource StyleHighlightTextBlockDefault}"> 
    <Setter Property="HighlightedText" 
      Value="{Binding ElementName=txtSearchBox, Path=Text}"></Setter> 
    <Setter Property="Background" Value="Tomato"></Setter> 
    <!--<Setter Property="HighlightedText" Value="{Binding UpdateSourceTrigger=PropertyChanged, 
       Mode=TwoWay, RelativeSource={RelativeSource FindAncestor, 
       AncestorType={x:Type UI:GenericWatchControl}}, Path=SearchTextBoxContent}" />--> 
    <!--<Style.Triggers> 
    <Trigger Property="Text" Value="{x:Static ProfilingServerShared:MissingDataValue.NotAvailableText}"> 
     <Setter Property="Foreground" Value="LightGray" /> 
    </Trigger> 
    </Style.Triggers>--> 
</Style> 

感谢所有

回答

1

您应该重写元数据HighlightTextBlock静态构造函数,因为如此:

public partial class HighlightTextBlock : TextBlock 
{ 
    static HighlightTextBlock() 
    { 
     DefaultStyleKeyProperty.OverrideMetadata(typeof(HighlightTextBlock), 
      new FrameworkPropertyMetadata(typeof(HighlightTextBlock))); 
    } 
} 

如果你不这样做,默认情况下,HighlightTextBlock将设法找到含蓄风格TextBlock,不HighglightTextBlock

+0

嗨克里斯我这样做,但它没有帮助。 –

+0

@iag_oz:你应该使用Snoop(谷歌),并看到正在发生在视觉树中的whatr。您还可以检查“样式”属性。 –

+0

你的回答是部分正确的,我不得不提一提的是,我们应该为主题或通用XAML文件添加一个隐式样式,然后它将很好地工作。谢谢我会将你的答案标记为正确。 –