2014-12-22 40 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文件添加一個隱式樣式,然後它將很好地工作。謝謝我會將你的答案標記爲正確。 –