无法找到资源样式错误

时间:2011-04-26 12:22:32

标签: silverlight silverlight-toolkit

我遇到了一个问题,我的搜索错误消息显示在哪里:无法找到名称/关键PerformanceBarChartBarTemplate的资源[行:454位置:35]

我的样式代码是:     

<Style x:Key="MainChartStyle" TargetType="toolkit:Chart">
    <Setter Property="BorderThickness" Value="0" />
    <Setter Property="TitleStyle" Value="{StaticResource ChartTitle}"/>
    <Setter Property="Palette">
        <Setter.Value>
            <datavis:ResourceDictionaryCollection>
                <ResourceDictionary>
                    <Style TargetType="toolkit:BarDataPoint">
                        <Setter Property="Background"
                        Value="#FF57007f" />
                        <Setter Property="BorderBrush"
                        Value="#FF2e0007" />
                        <Setter Property="Template"
                        Value="{StaticResource PerformanceBarChartBarTemplate}" />
                    </Style>
                </ResourceDictionary>
            </datavis:ResourceDictionaryCollection>
        </Setter.Value>
    </Setter>
    <Setter Property="LegendStyle">
        <Setter.Value>
            <Style TargetType="dataVisualizationToolkit:Legend">
                <Setter Property="Margin"
                    Value="15,0,15,0" />
                <Setter Property="VerticalAlignment"
                    Value="Center" />
                <Setter Property="BorderBrush"
                    Value="Transparent" />
                <Setter Property="Background"
                    Value="Transparent" />
            </Style>
        </Setter.Value>
    </Setter>
    <Setter Property="ChartAreaStyle">
        <Setter.Value>
            <Style TargetType="Panel">
                <Setter Property="MinWidth" Value="100"/>
                <Setter Property="MinHeight" Value="75"/>
            </Style>
        </Setter.Value>
    </Setter>
    <Setter Property="PlotAreaStyle">
        <Setter.Value>
            <Style TargetType="Grid">
                <Setter Property="Background"
                    Value="Transparent">
                </Setter>
            </Style>
        </Setter.Value>
    </Setter>
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="toolkit:Chart">
                <Border Background="{TemplateBinding Background}"
                    BorderBrush="{TemplateBinding BorderBrush}"
                    BorderThickness="{TemplateBinding BorderThickness}"
                    Padding="10">
                    <Grid>
                        <Grid.RowDefinitions>
                            <RowDefinition Height="Auto"/>
                            <RowDefinition Height="*"/>
                        </Grid.RowDefinitions>
                        <dataVisualizationToolkit:Title Style="{TemplateBinding TitleStyle}"
                                              Content="{TemplateBinding Title}" />
                        <Grid Margin="0,15,0,15"
                          Grid.Row="1">
                            <Grid.ColumnDefinitions>
                                <ColumnDefinition Width="*" />
                                <ColumnDefinition Width="Auto" />
                            </Grid.ColumnDefinitions>
                            <dataVisualizationToolkit:Legend x:Name="Legend"
                                           Style="{TemplateBinding LegendStyle}"
                                           Grid.Column="1"/>
                            <toolkitChartingPrimitives:EdgePanel x:Name="ChartArea"
                                           Style="{TemplateBinding ChartAreaStyle}">
                                <Grid Style="{TemplateBinding PlotAreaStyle}"
                                  Canvas.ZIndex="-1" />
                            </toolkitChartingPrimitives:EdgePanel>
                        </Grid>
                    </Grid>
                </Border>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

它看不到的控件是:

<ControlTemplate x:Key="PerformanceBarChartBarTemplate"
             TargetType="toolkit:BarDataPoint">
    <Border BorderThickness="0"
        Opacity="0"
        x:Name="Root">
        <VisualStateManager.VisualStateGroups>
            <VisualStateGroup x:Name="CommonStates">
                <VisualStateGroup.Transitions>
                    <VisualTransition GeneratedDuration="0:0:0.1" />
                </VisualStateGroup.Transitions>
                <VisualState x:Name="Normal" />
                <VisualState x:Name="MouseOver">
                    <Storyboard>
                        <DoubleAnimation Storyboard.TargetName="MouseOverHighlight"
                                     Storyboard.TargetProperty="Opacity"
                                     To="0.6"
                                     Duration="0" />
                    </Storyboard>
                </VisualState>
            </VisualStateGroup>
            <VisualStateGroup x:Name="SelectionStates">
                <VisualStateGroup.Transitions>
                    <VisualTransition GeneratedDuration="0:0:0.1" />
                </VisualStateGroup.Transitions>
                <VisualState x:Name="Unselected" />
                <VisualState x:Name="Selected">
                    <Storyboard>
                        <DoubleAnimation Storyboard.TargetName="SelectionHighlight"
                                     Storyboard.TargetProperty="Opacity"
                                     To="0.6"
                                     Duration="0" />
                    </Storyboard>
                </VisualState>
            </VisualStateGroup>
            <VisualStateGroup x:Name="RevealStates">
                <VisualStateGroup.Transitions>
                    <VisualTransition GeneratedDuration="0:0:0.5" />
                </VisualStateGroup.Transitions>
                <VisualState x:Name="Shown">
                    <Storyboard>
                        <DoubleAnimation Storyboard.TargetName="Root"
                                     Storyboard.TargetProperty="Opacity"
                                     To="1"
                                     Duration="0" />
                    </Storyboard>
                </VisualState>
                <VisualState x:Name="Hidden">
                    <Storyboard>
                        <DoubleAnimation Storyboard.TargetName="Root"
                                     Storyboard.TargetProperty="Opacity"
                                     To="0"
                                     Duration="0" />
                    </Storyboard>
                </VisualState>
            </VisualStateGroup>
        </VisualStateManager.VisualStateGroups>

        <Grid Margin="0 4 0 4">
            <Grid.RowDefinitions>
                <RowDefinition Height="*" />
                <RowDefinition Height="*" />
            </Grid.RowDefinitions>

            <!-- Main bar shape -->
            <Rectangle Fill="{TemplateBinding Background}"
                   Stroke="{TemplateBinding BorderBrush}"
                   StrokeThickness="{TemplateBinding BorderThickness}"
                   RadiusX="3"
                   RadiusY="3"
                   Grid.Row="0"
                   Grid.RowSpan="2">
                <Rectangle.Effect>
                    <DropShadowEffect BlurRadius="10"
                                  Direction="0"
                                  Color="#FFFFFFFF"
                                  ShadowDepth="0" />
                </Rectangle.Effect>
            </Rectangle>


            <!-- Diffuse Glow -->
            <Rectangle RadiusX="3"
                   RadiusY="3"
                   Margin="4"
                   Grid.Row="0"
                   Grid.RowSpan="2"
                   Opacity=".25"
                   Fill="White"
                   >
                <Rectangle.Effect>
                    <BlurEffect Radius="8" />
                </Rectangle.Effect>

            </Rectangle>


            <!-- Specular Highlight -->
            <Rectangle RadiusX="3"
                   RadiusY="3"
                   Margin="2"
                   Grid.Row="0">

                <Rectangle.Fill>
                    <LinearGradientBrush>
                        <GradientStop Color="#99ffffff"
                                  Offset="0" />
                        <GradientStop Color="#22ffffff"
                                  Offset="1" />
                    </LinearGradientBrush>
                </Rectangle.Fill>
            </Rectangle>

            <!--<Border BorderBrush="#ccffffff"
                BorderThickness="1">
            <Border BorderBrush="#77ffffff"
                    BorderThickness="1" />
        </Border>-->

            <Rectangle x:Name="SelectionHighlight"
                   Fill="Red"
                   Opacity="0" />
            <Rectangle x:Name="MouseOverHighlight"
                   RadiusX="3"
                   RadiusY="3"
                   Fill="White"
                   Opacity="0" />
        </Grid>
        <ToolTipService.ToolTip>
            <ContentControl Content="{TemplateBinding FormattedDependentValue}" />
        </ToolTipService.ToolTip>
    </Border>
</ControlTemplate>

1 个答案:

答案 0 :(得分:2)

我认为您只需将'PerformanceBarChartBarTemplate'控件模板移动到您在资源部分中定义的样式之上。

修改 首先,您需要将模板包装成样式并为其命名

<Style x:Key="BarDataPointStyle" TargetType="toolkit:DataPoint">
    <Setter Property="Template" Value="{StaticResource PerformanceBarChartBarTemplate}"/>
</Style>

这样做的原因是因为我注意到我必须使用名为“DataPointStyle”的内部样式才能使其正常工作,然后我使用BasedOn来获取模板。 以下是定义调色板的方法。

    <toolkit:Chart.Palette>
        <toolkit:ResourceDictionaryCollection>
            <ResourceDictionary>
                <Style x:Key="DataPointStyle" TargetType="toolkit:BarDataPoint" BasedOn="{StaticResource BarDataPointStyle}">
                    <Setter Property="Background" Value="Yellow" />
                    <Setter Property="BorderBrush" Value="Black" />
                </Style>
            </ResourceDictionary>
            <ResourceDictionary>
                <Style x:Key="DataPointStyle" TargetType="toolkit:BarDataPoint" BasedOn="{StaticResource BarDataPointStyle}">
                    <Setter Property="Background" Value="Red" />
                    <Setter Property="BorderBrush" Value="Black" />
                </Style>
            </ResourceDictionary>
        </toolkit:ResourceDictionaryCollection>
    </toolkit:Chart.Palette>

我希望这会有所帮助。

解决方案2: 只需用这个替换你的调色板的setter。您会注意到我在样式中添加了一个x:Key,这就是您所缺少的。我测试了它并且它有效。

    <Setter Property="Palette">
        <Setter.Value>
            <toolkit:ResourceDictionaryCollection>
                <ResourceDictionary>
                    <Style x:Key="DataPointStyle" TargetType="toolkit:BarDataPoint">
                        <Setter Property="Background"
                                Value="#FF57007f" />
                        <Setter Property="BorderBrush"
                                Value="#FF2e0007" />
                        <Setter Property="Template"
                                Value="{StaticResource PerformanceBarChartBarTemplate}" />
                    </Style>
                </ResourceDictionary>

                <ResourceDictionary>
                    <Style x:Key="DataPointStyle" TargetType="toolkit:BarDataPoint">
                        <Setter Property="Background"
                                Value="Red" />
                        <Setter Property="BorderBrush"
                                Value="Black" />
                        <Setter Property="Template"
                                Value="{StaticResource PerformanceBarChartBarTemplate}" />
                    </Style>
                </ResourceDictionary>
            </toolkit:ResourceDictionaryCollection>
        </Setter.Value>
    </Setter>