#.net #wpf #styles
#.net #wpf #стили
Вопрос:
У меня есть стиль WPF, для которого задается TextDecorations
свойство dependency TargetType: TexBlock
. Мне нужно использовать тот же стиль для определенных элементов запуска, которые находятся в некотором текстовом блоке, который сам по себе не использует вышеупомянутый стиль. Как я могу добиться этого, не повторяя тот же стиль с другим TargetType
?
Ответ №1:
Просто не указывайте TargetType
, а уточняйте свойство, например:
<Style x:Key="CommonStyle">
<Setter Property="Inline.TextDecorations" Value="StrikeThrough" />
</Style>
<TextBlock Style="{StaticResource CommonStyle}" Text="Lorem Ipsum" />
<TextBlock>
<Run Style="{StaticResource CommonStyle}" Text="Lorem" />
<Run Text="Ipsum" />
</TextBlock>
Если вы хотите продолжить разработку стиля, который вы можете использовать BasedOn
, это также позволяет неявно применять указанный стиль, не устанавливая ключ для производного стиля.
Комментарии:
1. Вау. Я попробовал то же самое, но я установил
Property="TextDecorations"
вместоProperty="Inline.TextDecorations"
, и получил ошибку «FrameworkElement не содержит …». Добавление «встроенного». действительно работает.2. Меня интересует базовый механизм, который позволяет это, не могли бы вы, пожалуйста, пролить свет или некоторые ссылки?
3. @H.B. — есть ли способ обнаружить это, не отражая код? Указано ли где-нибудь в MSDN, что
TextBlock.TextDecorations
«похищает»Inline.TextDecorations
?4. @BorisB.: 1. Если вы не используете префикс, он будет искать свойство on
FrameworkElement
, потому что этому классу принадлежитStyle
свойство. 2.Run
наследует свойство отInline
иTextBlock
повторно использует свойство с помощьюAddOwner
. Если вы видите два одинаковых свойства в несвязанных типах, всегда стоит проверить, использует ли одно свойство другого. Для этого удобны декомпиляторы (например, ILSpy ). Проверьте статические конструкторы классов на предмет инициализации свойств.5. @Erno: Я так не думаю, я всегда использую для этого декомпилятор, посмотрел на MSDN, но они, к сожалению, не делятся этой информацией.