Невозможно переопределить стиль TextBlock в XAML

У меня есть это в ResourceDictionary, определяющий стиль на уровне приложения:

<Style x:Key="TextBlockStyle" TargetType="TextBlock">
    <Setter Property="Margin" Value="0,10,0,10"/>
</Style>
<Style TargetType="TextBlock" BasedOn="{StaticResource TextBlockStyle}" />

Я хочу удалить поля для определенного TextBlock, который находится внутри элемента управления xctk:PropertyGrid (из расширенного инструментария WPF). Если я просто изменил числа в стиле ResourceDictionary выше, это работает.

Теперь я пытаюсь переопределить стиль PropertyGrid в конкретном окне XAML вместо глобальных стилей.

<xctk:PropertyGrid>
    <xctk:PropertyGrid.Resources>
        <Style TargetType="TextBlock">
            <Setter Property="Margin" Value="0,0,0,0"/>
        </Style>
    </xctk:PropertyGrid.Resources>
</xctk:PropertyGrid>

К сожалению, это не работает, TextBlock в PropertyGrid не изменяется, сохраняя глобальный стиль.

ОБНОВЛЕНО:

Внутри xtck:PropertyGrid есть xctk:WatermarkTextBox. WatermarkTextBox имеет это внутри:

<ContentPresenter x:Name="PART_WatermarkHost" Content="{TemplateBinding Watermark}"
    ContentTemplate="{TemplateBinding WatermarkTemplate}"
    VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
    HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
    isHitTestVisible="False"
    Margin="{TemplateBinding Padding}"
    Visibility="Collapsed" />

Именно этот ContentPresenter, по-видимому, производит рассматриваемый TextBlock.

  1. Стиль в ResourceDictionary применяется к нему, изменяя поле.

  2. Но мой стиль внутри этого не отменяет.

Как бы я это сделал?

1 ответ

Я только что провел несколько тестов, и я просто не могу воспроизвести вашу проблему. любой Style что я положил в UIElement.Resources раздел работает так же, как Style что я положил в App.Resources раздел.

Если UIElement имеет свойство, установленное либо напрямую, либо в своем собственном UIElement.Styleзатем пытается установить то же свойство на другое значение в другом Style просто не сработает. Это верно независимо от того, где это Style определено.

Вы действительно уверены, что меняете Margin ценности в вашем App.Resources раздел на самом деле имеет значение? Попробуйте установить Background свойство красного или что-то еще, в чем вы можете быть уверены на 100%.

Между прочим, вы можете знать это уже, но если вы хотите установить Margin свойство с четырьмя одинаковыми значениями, вы можете просто установить его только с одним значением следующим образом:

<TextBlock Text="Something" Margin="0" />

ОБНОВЛЕНИЕ >>>

@ Андрей, посмотрите на добавленный вами XAML... Я думаю, что ваш ответ... посмотрите на следующую строку:

Margin="{TemplateBinding Padding}"

Margin свойство фактически установлено из Padding значение родительского шаблона, поэтому попробуйте установить Padding собственность вместо Это должно быть связано с TextBox.Margin,

Другие вопросы по тегам