2011-04-27 3 views
8

ContentPresenter에서 작동하도록 TextTrimming을하는 간단한 방법이 있습니까?WPF : ContentPresenter에서 TextTrimming

TextBlock 및 AccessText의 TextTrimming을 CharacterEllipsis로 설정 한 implict 스타일이 있지만 ContentPresenter에서 선택하지 않았습니다. ContentPresenter를 AccessText 또는 TextBlock으로 변경하고 거기에 설정할 수 있지만 템플릿은 텍스트 내용 만 처리합니다.

제안 사항?

감사합니다.

답변

10

implict 스타일이 응용 프로그램 Resources에 정의되어 있지 않으면 요소가 컨트롤의 템플릿 에 정의 된 경우 UIElement에서 파생 된 요소의 암시 적 스타일이 적용되지 않습니다. 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

하이퍼 링크조차도 빨간색입니다. * 무엇을 했습니까 *! –

+3

@ H.B. - 나는 마을을 붉은 색으로 칠했다! – CodeNaked

+1

설명해 주셔서 감사합니다! 다른 곳에 게시 된 다른 솔루션은 ControlTemplate 내부의 ContentPresenter.Resources에 스타일을 정의합니다. 이 접근법을 시도하고 작동합니다. 우리의 경우에는 묵시적 스타일을 Application.Resources로 옮기는 것은 모든 텍스트 블록이 다듬기로되어 있기 때문에 작동 할 것입니다. 위에서 설명한 것과 비슷한 암시 적 데이터 템플릿을 추가하고 있습니까? 임의의 내용을 지원할 수 있도록 데이터 템플릿을 정의하는 방법은 무엇입니까? – dex3703