自定义控件文本框和隐式样式

时间:2014-12-22 09:04:32

标签: c# wpf xaml wpf-controls textblock

我们正试图为我们制作的自定义文本块控件制作一种隐含的样式 此自定义控件基于文本块并添加一些DP和逻辑 当我们在本地使用这种风格时,一切正常。此外,当我们给这个风格一个关键时,它也有效。

这是自定义控件继承代码:

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 个答案:

答案 0 :(得分:1)

您应该在HighlightTextBlock静态构造函数中覆盖元数据,如下所示:

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

如果您不这样做,默认情况下,HighlightTextBlock会尝试查找TextBlock的隐式样式,而不是HighglightTextBlock