0

我在 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 样式中的数字,它就可以工作。

现在我试图在特定窗口 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。

  1. ResourceDictionary 中的样式被应用到它,改变了边距。

  2. 但我内心的风格并没有覆盖它。

我该怎么做?

4

1 回答 1

1

我刚刚进行了一些测试,但我根本无法重现您的问题。我放入该部分的任何Style内容都与我放入该部分UIElement.Resources的 a 相同。StyleApp.Resources

如果 aUIElement具有直接设置或在其自己的属性中设置的属性UIElement.Style,则尝试将相同的属性设置为另一个中的不同值是Style行不通的。无论在哪里Style定义都是如此。

真的确定更改部分中的Margin确实会产生影响吗?尝试将属性设置为红色或您可以 100% 确定的其他内容。App.ResourcesBackground

顺便说一句,您可能已经知道这一点,但是如果您想设置一个Margin具有四个相同值的属性,您可以只使用一个值来设置它,如下所示:

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

更新>>>

@Andrew,看看你添加的XAML......我想的答案是......看看下面一行:

Margin="{TemplateBinding Padding}"

Margin属性实际上是从Padding模板父级的值设置的,因此请尝试设置该Padding属性。那应该链接到TextBox.Margin.

于 2013-09-13T14:12:15.150 回答