代码之家  ›  专栏  ›  技术社区  ›  emiliegue

WPF LiveCharts样式:几个图表导致第二个出现错误

  •  1
  • emiliegue  · 技术社区  · 7 年前

    我在使用LiveCharts时遇到了一个问题:PieMenu。 我在一个资源文件中为PieChart和PieSeries定义了一个样式,这样我的所有饼图看起来都一样。 在UserControl中,我使用资源字典中的资源文件,并将其添加到资源中,然后创建了两个饼图:

        <Border HorizontalAlignment="Stretch"
                Background="{StaticResource MenuBackgroundScb2}" 
                BorderThickness="2" BorderBrush="{StaticResource WidgetBorderScb}"
                Margin="0 0 0 20">
            <StackPanel HorizontalAlignment="Stretch" >
                <Label Content="Montant des offres selon leurs états" Style="{StaticResource TitleLabel}"/>
                <lc:PieChart Series="{Binding Path=AmountOfferByStatusSeriesCollection}"/>
            </StackPanel>
        </Border>
        <Border HorizontalAlignment="Stretch"
                Background="{StaticResource MenuBackgroundScb2}" 
                BorderThickness="2" BorderBrush="{StaticResource WidgetBorderScb}">
            <StackPanel HorizontalAlignment="Stretch" >
                <Label Content="Nombre d'offres selon leurs états" Style="{StaticResource TitleLabel}"/>
                <lc:PieChart Series="{Binding Path=NbOfferByStatusSeriesCollection}"  />
            </StackPanel>
        </Border>
    

    第一个图表饼图看起来不错,但第二个有一个问题:图例没有显示,鼠标悬停会导致应用程序崩溃。

    bug

    这个错误出现了,因为我在一个单独的资源文件中声明了样式,而不是在PieChart的资源中,所以我知道我对NbOfferByStatusSeriesCollection系列没有问题。

    此外,我还有第三个饼图,它显示在另一个页面中,与前两个饼图不同时显示,这一个效果很好。

    我做错了什么??

    这是资源文件的摘录。

    <Style TargetType="lc:PieChart">
        <Setter Property="Height" Value="140"/>
        <Setter Property="InnerRadius" Value="25"/>
        <Setter Property="SeriesColors" Value="{StaticResource GraphColors}" />
        <Setter Property="Foreground" Value="{StaticResource LightForegroundScb}"/>
        <Setter Property="LegendLocation" Value="Right" />
        <Setter Property="ChartLegend">
            <Setter.Value>
                <lc:DefaultLegend BulletSize="20"/>
            </Setter.Value>
        </Setter>
        <Setter Property="DataTooltip">
            <Setter.Value>
                <lc:DefaultTooltip SelectionMode="OnlySender" 
                                           Foreground="{StaticResource LightForegroundScb}"
                                           Background="{StaticResource MenuBackgroundScb2}" 
                                           BorderThickness="2"
                                           BorderBrush="{StaticResource MenuBackgroundScb}"
                                           BulletSize="20" />
            </Setter.Value>
        </Setter>
    </Style>
    
    <Style TargetType="lc:PieSeries">
        <Setter Property="Stroke" Value="{StaticResource MenuBackgroundScb2}"/>
        <Setter Property="StrokeThickness" Value="3"/>
    </Style>
    

    这是调用堆栈:

    enter image description here

    1 回复  |  直到 7 年前
        1
  •  1
  •   emiliegue    7 年前

    事实证明,我必须在饼图样式之外设置默认图例和默认数据工具提示的样式,并将其添加到饼图样式资源中:

    <Style TargetType="lc:DefaultLegend" x:Key="PieChartDefaultLegend">
        <Setter Property="BulletSize" Value="20"/>
    </Style>
    
    <Style TargetType="lc:DefaultTooltip" x:Key="PieChartDefaultTooltip">
        <Setter Property="SelectionMode" Value="OnlySender"/>
        <Setter Property="Foreground" Value="{StaticResource LightForegroundScb}"/>
        <Setter Property="Background" Value="{StaticResource MenuBackgroundScb2}" />
        <Setter Property="BorderThickness" Value="2"/>
        <Setter Property="BorderBrush" Value="{StaticResource MenuBackgroundScb}"/>
        <Setter Property="BulletSize" Value="20" />
    </Style>
    
    <Style TargetType="lc:PieChart">
        <Setter Property="InnerRadius" Value="25"/>
        <Setter Property="SeriesColors" Value="{StaticResource GraphColors}" />
        <Setter Property="Foreground" Value="{StaticResource LightForegroundScb}"/>
        <Setter Property="LegendLocation" Value="Right" />
        <Style.Resources>
            <Style BasedOn="{StaticResource PieChartDefaultLegend}" TargetType="lc:DefaultLegend"/>
            <Style BasedOn="{StaticResource PieChartDefaultTooltip}" TargetType="lc:DefaultTooltip"/>
        </Style.Resources>
    </Style>