Диаграммы набора инструментов WPF не отображаются, если я изменяю шаблон элемента управления DataPoint в .NET 4 - PullRequest
2 голосов
/ 11 ноября 2011

У меня очень странная проблема с диаграммами инструментария WPF в среде .NET 4.По сути, я просто хочу настроить шаблон всплывающей подсказки для ColumnDataPoints.Для этого я скопировал стиль по умолчанию для ColumnDataPoint из исходного кода набора инструментов (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>

результаты таковы:

enter image description here

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

Ответы [ 2 ]

2 голосов
/ 11 ноября 2011

О, боже, я нашел ответ: я заменил System.Windows.DataVisualization.Toolkit.dll для .NET 3.5 на версию 4.0 этого , и теперь он работает!

1 голос
/ 15 февраля 2012

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

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

...