1

我对 Silverlight Charting 控件的样式有一个非常奇怪的问题。当我为 anyseries 创建 DataPointStyle 时,它​​会忽略现有的默认颜色组合。即使我没有在 DataPointStyle 的背景中设置任何内容,它也会开始向我显示相同的(橙色)颜色。

我想要的是创建一些自定义工具提示并保持背景不变。但它不适合我。任何建议都非常感谢。

干杯!

维诺德

4

1 回答 1

2

我认为诀窍不是将数据点样式应用于图表本身,而是应用于构成调色板的各个颜色。

我从以下开始,它使用饼图。使用其他类型的图表时应适用相同的原则:

<UserControl x:Class="ChartPaletteDemo.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:toolkit="http://schemas.microsoft.com/winfx/2006/xaml/presentation/toolkit"
    mc:Ignorable="d"
    d:DesignHeight="300" d:DesignWidth="400">
    <UserControl.Resources>
        <Style x:Key="pointStyle" TargetType="toolkit:DataPoint">
            <Setter Property="DependentValueStringFormat"
                    Value="The value is {0:N0}" />
            <Setter Property="RatioStringFormat" Value="" />
        </Style>
    </UserControl.Resources>

    <toolkit:Chart>
        <toolkit:Chart.Series>
            <toolkit:PieSeries ItemsSource="{Binding Path=Data}"
                               IndependentValueBinding="{Binding Path=Key}"
                               DependentValueBinding="{Binding Path=Value}"
                               DataPointStyle="{StaticResource pointStyle}" />
        </toolkit:Chart.Series>
    </toolkit:Chart>
</UserControl>

这给了我一个带有自定义工具提示文本的饼图,但所有段都是橙色的。

下一步是设置自定义调色板。Silverlight Toolkit 图表使用的调色板是ResourceDictionaryCollection,每个包含ResourceDictionary代表调色板中的一种颜色。您可以在Themes\generic.xaml程序集中找到图表的“默认”调色板System.Windows.Controls.DataVisualization.Toolkit。您可以使用 Blend 或 ILSpy 等工具来获取此调色板。

我采用了这个“默认”调色板,并且:

  • 删除了所有的setter DataShapeStyle(我不确定它们是否必要,但如果你愿意,你可以保留它们),
  • TargetType每个DataPointStyle的更改Controltoolkit:DataPoint, 和
  • 添加BasedOn="{StaticResource pointStyle}"到每个DataPointStyle.

最后一点是为每个调色板条目设置自定义工具提示格式的原因。

这给我留下了类似以下的内容,我将其添加到<UserControl.Resources>

    <toolkit:ResourceDictionaryCollection x:Key="chartPalette">
        <!-- Blue -->
        <ResourceDictionary>
            <RadialGradientBrush x:Key="Background" GradientOrigin="-0.1,-0.1"
                                 Center="0.075,0.015" RadiusX="1.05"
                                 RadiusY="0.9">
                <GradientStop Color="#FFB9D6F7" />
                <GradientStop Color="#FF284B70" Offset="1" />
            </RadialGradientBrush>
            <Style x:Key="DataPointStyle" TargetType="toolkit:DataPoint"
                   BasedOn="{StaticResource pointStyle}">
                <Setter Property="Background"
                        Value="{StaticResource Background}" />
            </Style>
        </ResourceDictionary>
        <!-- other styles copied similarly, but omitted for brevity -->
   </toolkit:ResourceDictionaryCollection>

然后我DataPointStyle="{StaticResource pointStyle}"从 中删除PieSeries并添加Palette="{StaticResource chartPalette}"<toolkit:Chart>元素中。当我运行应用程序时,我让饼图的四个部分使用不同的颜色。

致谢:大部分内容来自 atomlinson 在 Silverlight 论坛上的帖子 http://forums.silverlight.net/post/330170.aspx

于 2012-07-08T10:14:31.127 回答