Диаграммы инструментария WPF не отображаются, если я изменяю ControlTemplate точки данных в .NET 4

#charts #tooltip #wpftoolkit #controltemplate

#Диаграммы #всплывающая подсказка #wpftoolkit #controltemplate

Вопрос:

Я сталкиваюсь с очень странной проблемой с диаграммами инструментария WPF в среде .NET 4. По сути, я просто хочу настроить шаблон всплывающей подсказки для точек данных столбца. Для достижения этой цели я скопировал стиль по умолчанию для точки данных столбца из исходного кода инструментария (generic.xaml) в свои ресурсы управления и изменил часть ToolTipService следующим образом:

 <UserControl.Resources>
<Style TargetType="charts:ColumnDataPoint" x:Key="CustomDataPointStyle">
    <Setter Property="Background" Value="Orange" />
    <Setter Property="BorderBrush" Value="Black" />
    <Setter Property="BorderThickness" Value="1" />
    <Setter Property="IsTabStop" Value="False" />
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="charts:ColumnDataPoint">
                <Border BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" 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 Background="{TemplateBinding Background}">
                        <Rectangle>
                            <Rectangle.Fill>
                                <LinearGradientBrush>
                                    <GradientStop Color="#77ffffff" Offset="0" />
                                    <GradientStop Color="#00ffffff" 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" Fill="White" Opacity="0" />
                    </Grid>
                    <ToolTipService.ToolTip>
                        <StackPanel>
                            <ContentControl Content="Custom ToolTip" FontWeight="Bold"/>
                            <ContentControl Content="{TemplateBinding FormattedDependentValue}"/>
                        </StackPanel>
                    </ToolTipService.ToolTip>
                </Border>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>
  

Теперь проблема в том, что, как только я применяю свой CustomDataPointStyle (даже если я ничего не меняю!), ColumnSeries вообще не отображается на моей диаграмме.

 <Grid x:Name="ChartGrid" DataContext="{Binding}">
<charts:Chart x:Name="Chart1" Margin="5,0,0,0"
    VerticalAlignment="Stretch" HorizontalAlignment="Stretch"                       
    Title="{Binding Path=Title}">
    <charts:Chart.Axes>
        <charts:CategoryAxis Orientation="X" Title="{Binding Path=XAxisTitle}" Location="Bottom" />
        <charts:CategoryAxis Orientation="Y" Title="{Binding Path=YAxisTitle}" Location="Right" ShowGridLines="True" />
    </charts:Chart.Axes>

    <charts:ColumnSeries x:Name="ColumnSeries" Title="{Binding Path=SeriesTitle}"
                ItemsSource="{Binding Path=Data}" DataPointStyle="{StaticResource CustomDataPointStyle}"
                DependentValueBinding="{Binding Path=Value}" IndependentValueBinding="{Binding Path=Key}">
    </charts:ColumnSeries>
</charts:Chart>
  

приводит к этому:

введите описание изображения здесь

Я предполагаю, что мне не хватает VisualState или чего-то, что фактически отображает диаграмму, но как это может быть, учитывая, что я скопировал (!) оригинальный стиль? Инструментарий создан для .NET 3.5, и я должен использовать .NET 4 в своем приложении — может ли это быть причиной?

Ответ №1:

О боже, я нашел ответ: я заменил систему.Windows.Визуализация данных.Инструментарий.dll для .NET 3.5 с этой версией 4.0, и теперь она работает!

Комментарии:

1. Да, я решил ту же проблему, заменив System.Windows.DataVisualization.Toolkit.dll

Ответ №2:

Вы также можете попробовать установить Opacity = «1» в вашем блоке стиля границы:

<Border BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Opacity="1" x:Name="Root">