Пользовательская легенда в графике wpf - PullRequest
1 голос
/ 28 июля 2011

Во-первых, я очень новичок в wpf и XAML. Большая часть моего опыта связана с приложениями для форм Windows.

У меня очень простая диаграмма с тремя рядами линий, привязанными к объектам данных. Мне бы хотелось настроить легенду, чтобы она отображала не только цвета и заголовки серии строк, но и добавила текстовое поле под каждым элементом легенды, чтобы отобразить последнее значение точки данных в серии.

Вот что у меня есть:

<Grid Grid.Row="1" Grid.Column="1" Background="{StaticResource graphBackground}" >
            <Grid.Resources >
                <Style TargetType="charting:LineSeries" >
                    <Setter Property="PolylineStyle" >
                        <Setter.Value>
                            <Style TargetType="Polyline" >
                                <Setter Property="StrokeThickness" Value="5" />
                            </Style>
                        </Setter.Value>
                    </Setter>
                </Style>
                <Style x:Key="LegendItemStyle" TargetType="charting:LegendItem" >
                    <Setter Property="Template">
                        <Setter.Value>    
                            <ControlTemplate TargetType="{x:Type charting:LegendItem}">
                                <Border BorderBrush="Black" BorderThickness="0">
                                    <StackPanel>
                                        <StackPanel Orientation="Horizontal" >
                                            <Rectangle Width="12" Height="12" Fill="{Binding Background}" />
                                            <datavis:Title Content="{TemplateBinding Content}" FontSize="18" Margin="10"/>
                                        </StackPanel>
                                        <StackPanel Orientation="Horizontal" >
                                            <TextBlock Text="{Binding}" />
                                        </StackPanel>
                                    </StackPanel>
                                </Border>
                            </ControlTemplate>
                        </Setter.Value>
                    </Setter>
                </Style>
            </Grid.Resources>
            <charting:Chart FontWeight="Bold">
                <charting:Chart.Axes>
                    <charting:LinearAxis Orientation="Y" Minimum="0" Maximum="{Binding Path=graphmax}" Interval="{Binding Path=graphinterval}" ShowGridLines="True" FontSize="18" />                            
                    <charting:DateTimeAxis Orientation="X" FontSize="18" Minimum="{Binding Path=datemin}" Maximum="{Binding Path=datemax}" IntervalType="Months" Interval="1" />
                </charting:Chart.Axes>
                <charting:LineSeries ItemsSource="{Binding Path=dataPoints}" DependentValuePath="Value" IndependentValuePath="Key" Title="13 Wk" LegendItemStyle="{DynamicResource LegendItemStyle}">
                    <charting:LineSeries.DataPointStyle>
                        <Style TargetType="charting:LineDataPoint" >
                            <Setter Property="Background" Value="Green" />
                            <Setter Property="Opacity" Value="0" />
                        </Style>                                   
                    </charting:LineSeries.DataPointStyle>                        
                </charting:LineSeries>

1 Ответ

1 голос
/ 28 июля 2011

Я думаю, что проблема в том, что вы используете {Binding}, который привязывает ваш объект DataContext, который, как я считаю, в данном случае является самим LegendItem. Вот хорошее объяснение , что делает {Binding} . Вы можете либо добавить путь, чтобы получить определенное свойство, либо использовать конвертер для форматирования результата так, как вы хотите.

...