修改混合中的视觉状态?

时间:2014-07-13 03:49:51

标签: wpf wpf-controls blend

我正在玩第三方包装图表(Modern UI Charts)。它看起来很棒,似乎适用于我需要的东西。

但是在软件包附带的示例代码中,所有样式和模板都位于Generic.xaml的资源字典中,因为它们都是自定义(无外观)控件。

但我想覆盖Generic.xaml文件中的很多内容,包括一些视觉状态。具体来说,在我想要使用的图表中,它会在任何数据发生变化时进行动画制作。我想把它关掉。

如果我尝试编辑混合中的模板或样式,我会看到默认xaml中的一些代码,但不是视觉状态。有没有办法修改它们?

或者我如何完全覆盖Generic.xaml并将其替换为我自己的?

1 个答案:

答案 0 :(得分:1)

当您继承控件并通过DefaultStyleKeyProperty.OverrideMetadata

创建自己的控件时,很容易覆盖

我不确定你的实施情况。通常,如果您为相关类型创建样式,它将覆盖现有样式,除非您使用BasedOn属性。

例如

<Style TargetType="local:PieChart" BasedOn="{StaticResource BaseChartStyle}">
    <Setter Property="ChartAreaStyle" Value="{StaticResource PieChartChartAreaStyle}" />
    <Setter Property="PlotterAreaStyle" Value="{StaticResource PieChartPlotterAreaStyle}" />
</Style>

如果您将上面的内容重新定义为

<Style TargetType="local:PieChart" >
    ... your style
</Style>

它将覆盖现有的样式

或者您可以选择通过BasedOn="{StaticResource {x:Type local:PieChart}}"

从元素的现有样式派生来覆盖特定属性
<Style TargetType="local:PieChart" BasedOn="{StaticResource {x:Type local:PieChart}}">
    <Setter Property="ChartAreaStyle" Value="{StaticResource MyChartAreaStyle}" />
</Style>

以类似的方式,您可以使用自己的版本覆盖所需元素的Template属性。