如何让一个元素及其子元素忽略全局样式?

3
为了让我的应用程序看起来一致,我定义了一个全局风格,适用于所有的元素,如下所示: MainSkin.xaml
<Style TargetType="{x:Type TextBlock}">
    <Setter Property="Margin" Value="5,0,5,0"/>
</Style>

很不幸,这会破坏我使用的图表元素(来自外部Visifire库),并且裁剪一些文本元素(在屏幕截图中用红色矩形标记):

enter image description here

View.xaml

xmlns:vc="clr-namespace:Visifire.Charts;assembly=WPFVisifire.Charts"

<vc:Chart>
    <vc:Chart.Titles>
        <vc:Title Text="SomeTitle" />
    </vc:Chart.Titles>
    <vc:Chart.AxesX>
        <vc:Axis Title="X" TitleFontSize="12" />
    </vc:Chart.AxesX>
    <vc:Chart.AxesY>
        <vc:Axis Title="Y" TitleFontSize="12"/>
    </vc:Chart.AxesY>
</vc:Chart>

通过测试我知道TextBlock样式的Margin设置导致了这个问题。我猜测,在Chart元素内部的某个地方,他们使用了一个受到我的样式影响的TextBlock

我该如何告诉Xaml中的Chart元素及其子元素忽略全局的TextBlock样式?

我尝试将Chart样式设置为null,但没有成功。

注意事项:

  • 我不想编辑在Chart中使用的外部源代码
  • 我不想使用带有我的样式x:Key
1个回答

4

只需创建另一个不设置任何内容的TextBlock隐式样式:

<vc:Chart>
    <vc:Chart.Resources>
        <Style TargetType="TextBlock" />
    </vc:Chart.Resources>

    <vc:Chart.Titles>
        <vc:Title Text="SomeTitle" />
    </vc:Chart.Titles>
    <vc:Chart.AxesX>
        <vc:Axis Title="X" TitleFontSize="12" />
    </vc:Chart.AxesX>
    <vc:Chart.AxesY>
        <vc:Axis Title="Y" TitleFontSize="12"/>
    </vc:Chart.AxesY>
</vc:Chart>

1
你太棒了,这正是我所需要的!非常感谢 :-) - nabulke

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接