WPF: TextTrimming в ContentPresenter - PullRequest
       13

WPF: TextTrimming в ContentPresenter

8 голосов
/ 28 апреля 2011

Есть ли простой способ заставить TextTrimming работать с ContentPresenter?

У меня есть стили импликации для TextBlock и AccessText, для которых TextTrimming установлен в CharacterEllipsis, но он не обнаружен ContentPresenter.Я могу изменить ContentPresenter на AccessText или TextBlock и установить его там, но тогда шаблон обрабатывает только текстовое содержимое.

Есть предложения?

Спасибо!

Ответы [ 2 ]

12 голосов
/ 28 апреля 2011

Неявные стили для элементов, которые являются производными от UIElement, но не от Control, не применяются, если элемент определен в шаблоне элемента управления , если не задан стиль Implict в ресурсах приложения. То же самое относится и к TextBlocks, используемым ContentPresenter.

Например, в следующем 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 голосов
/ 27 декабря 2018

Благодаря этому Гисту от Джеймса Нугента : "Стиль WPF, который помещает многоточие символов в содержимое кнопок без замены ContentPresenter на TextBlock и, таким образом, теряет способность поддерживать ключи доступа".

Это сработало для меня:

<ContentPresenter.Resources>
    <Style TargetType="TextBlock">
        <Setter Property="TextTrimming" Value="CharacterEllipsis"></Setter>    
    </Style>
</ContentPresenter.Resources>
...