Невозможно переопределить стиль 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.
Стиль в ResourceDictionary применяется к нему, изменяя поле.
Но мой стиль внутри этого не отменяет.
Как бы я это сделал?
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
,