2011-04-27 25 views
8

有沒有簡單的方法讓TextTrimming能夠與ContentPresenter一起使用?WPF:ContentPresenter上的TextTrimming

我有TextBlock和AccessText的TextTrimming設置爲CharacterEllipsis的隱式樣式,但它沒有被ContentPresenter拾取。我可以將ContentPresenter更改爲AccessText或TextBlock並將其設置在那裏,但該模板僅處理文本內容。

有什麼建議嗎?

謝謝!

回答

10

如果元素是在控件的模板中定義的,則除非隱式樣式在應用程序資源中定義,否則不應用從UIElement派生但不是Control的元素的隱式樣式。 ContentPresenter使用的TextBlocks也是如此。

例如,在下面的XAML最終用於呈現按鈕的內容將TextBlock將得到隱含風格:

<Window.Resources> 
    <Style TargetType="TextBlock"> 
     <Setter Property="Foreground" Value="Red" /> 
    </Style> 
</Window.Resources> 
<StackPanel> 
    <Button Content="Will not be red" /> 
    <TextBlock Text="Will be red" /> 
</StackPanel> 

如果採取完全一樣的風格,並將其移動到應用程序的資源,那麼這兩個將是紅色:

<Application.Resources> 
    <Style TargetType="TextBlock"> 
     <Setter Property="Foreground" Value="Red" /> 
    </Style> 
</Application.Resources> 

所以,你可以將你的含蓄風格應用程序資源,這是通常不是一個好主意。或者,您可以針對您的特定場景自定義顯示。這可以包括添加隱式DataTemplate或自定義控件的模板。

如果您可以提供更多信息,那麼知道哪種方法是最好的方法會更容易。

+0

即使超鏈接是紅色的,*你做了什麼*! – 2011-04-28 00:28:30

+3

@ H.B。 - 我把這個小鎮畫成了紅色! – CodeNaked 2011-04-28 00:33:52

+1

感謝您的解釋!在別處發佈的另一個解決方案在ControlTemplate中的ContentPresenter.Resources中定義了一種樣式。我試過這種方法,它的工作原理。在我們的案例中,將隱式樣式移動到Application.Resources將會像所有文本塊被修剪一樣工作。添加一個類似於我上面所做的隱式數據模板嗎?如何定義一個數據模板以便支持任意內容? – dex3703 2011-04-28 02:42:40

相關問題