我在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控件内(来自Extended WPF Toolkit)。如果我只是更改上面的ResourceDictionary样式中的数字,它就可以工作。
现在我试图在特定窗口XAML中覆盖PropertyGrid的样式而不是全局样式。
<xctk:PropertyGrid>
<xctk:PropertyGrid.Resources>
<Style TargetType="TextBlock">
<Setter Property="Margin" Value="0,0,0,0"/>
</Style>
</xctk:PropertyGrid.Resources>
</xctk:PropertyGrid>
不幸的是,这不起作用,PropertyGrid中的TextBlock保持不变,保持全局风格。
更新:
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中的样式会应用于它,从而更改边距。
但我的内心风格并没有覆盖它。
我该怎么做?
答案 0 :(得分:1)
我刚刚进行了多项测试,但我无法重现您的问题。我放入Style
部分的任何UIElement.Resources
与我放入Style
部分的App.Resources
的工作方式相同。
如果UIElement
直接或在其自己的UIElement.Style
中设置了属性,那么尝试将同一属性设置为另一个Style
中的其他值只是不起作用。无论定义Style
的位置如何,都是如此。
您确实确保更改Margin
部分实际中的App.Resources
值有所不同吗?尝试将Background
属性设置为红色或其他可以100%确定的属性。
顺便提一下,你可能已经知道了这一点,但是如果你想设置一个具有四个相同值的Margin
属性,你可以只设置一个这样的值:
<TextBlock Text="Something" Margin="0" />
更新&gt;&gt;&gt;
@Andrew,看看你添加的XAML ......我认为那里是你的答案......看看以下一行:
Margin="{TemplateBinding Padding}"
Margin
属性实际上是根据模板父级的Padding
值设置的,因此请尝试设置Padding
属性。 应该链接到TextBox.Margin
。