Как нарисовать несколько линий на одном графике в Silverlight 4 - PullRequest
0 голосов
/ 23 мая 2011

Я новичок в Silverlight и просто пытаюсь понять, как делать некоторые вещи.То, что я хотел бы сделать, это иметь диаграмму, которая имеет 2 линии, которые могут перекрывать друг друга.Что происходит с моим кодом, так это то, что отображается одна строка, а затем отображается следующая строка, одна за другой, а не перекрывающиеся.

Вот мой xaml

    <navigation:Page x:Class="SilverlightNav1.Home" 
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:navigation="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Navigation"
xmlns:charting="clr-namespace:System.Windows.Controls.DataVisualization.Charting;assembly=System.Windows.Controls.DataVisualization.Toolkit"

mc:Ignorable="d" d:DesignWidth="640" d:DesignHeight="547"
Title="Home"
Style="{StaticResource PageStyle}" xmlns:sdk="http://schemas.microsoft.com/winfx/2006/xaml/presentation/sdk" xmlns:toolkit="http://schemas.microsoft.com/winfx/2006/xaml/presentation/toolkit">

<Grid x:Name="LayoutRoot" Height="544">
    <sdk:Label Height="28" HorizontalAlignment="Left" Margin="12,12,0,0" Name="label1" VerticalAlignment="Top" Width="120" Content="First Name" />
    <TextBox Height="23" Margin="91,8,0,0" Name="txtFirstName" VerticalAlignment="Top" HorizontalAlignment="Left" Width="120" >
        <TextBox.RenderTransform>
            <SkewTransform AngleX="2" AngleY="12" />
        </TextBox.RenderTransform>
        <TextBox.Effect>
            <DropShadowEffect />
        </TextBox.Effect>
    </TextBox>
    <Button Content="Greet Me" Height="23" HorizontalAlignment="Left" Margin="91,72,0,0" Name="GreetMe" VerticalAlignment="Top" Width="75" Click="GreetMe_Click" />
    <TextBlock Margin="91,116,25,0" Name="Greeting" Text="" Height="105" VerticalAlignment="Top" FontSize="20" />
    <toolkit:Chart HorizontalAlignment="Left" Margin="21,246,0,0" Name="chart1" Title="Testing graph" VerticalAlignment="Top" Height="249" Width="400">
        <toolkit:Chart.Series>
            <toolkit:LineSeries Title="Guys" ItemsSource="{Binding p}" IndependentValueBinding="{Binding FirstName}" DependentValueBinding="{Binding Greeting}" Name="testGraph">
            </toolkit:LineSeries>
            <toolkit:LineSeries Title="Girls" ItemsSource="{Binding girls}" IndependentValueBinding="{Binding FirstName}" DependentValueBinding="{Binding Greeting}" Name="lsGirls">
            </toolkit:LineSeries>
        </toolkit:Chart.Series>
    </toolkit:Chart>
</Grid>

Вот мой код.

        List<Model.Person> p = new List<Model.Person>();
        p.Add(new Model.Person() { FirstName = "Bob", Greeting = 1 });
        p.Add(new Model.Person() { FirstName = "Phil", Greeting = 3 });
        p.Add(new Model.Person() { FirstName = "Dennis", Greeting = 4});
        p.Add(new Model.Person() { FirstName = "Chewie", Greeting = 2 });
        //this.DataContext = p;

        List<Model.Person> girls = new List<Model.Person>();
        girls.Add(new Model.Person() { FirstName = "Jamie", Greeting = 4 });
        girls.Add(new Model.Person() { FirstName = "Abby", Greeting = 7 });
        girls.Add(new Model.Person() { FirstName = "M", Greeting = 5 });
        girls.Add(new Model.Person() { FirstName = "K", Greeting = 6 });

        ((LineSeries)chart1.Series[0]).ItemsSource = p;
        ((LineSeries)chart1.Series[1]).ItemsSource = girls;

И, наконец, вот мой класс, определенный в person.cs

   namespace SilverlightNav1.Model
   {
   public class Person
   {
   private string _firstName;
   public string FirstName
   {
   get { return _firstName; }
   set
   {
   _firstName = value;
   }
   }

   private int _greeting;
   public int Greeting
   {
   get { return _greeting; }
   set { _greeting = value; }
   }
   }
   }

1 Ответ

0 голосов
/ 24 мая 2011

Проблема заключается в том, что оба набора данных имеют разные значения оси X. Например, Боб и Джейми не совпадают, поэтому инструментарий не будет отображать их на одном и том же значении оси X.Вы можете увидеть, как это можно исправить, изменив набор данных для девочек FirstName на Боб, Фил, Деннис и Чуи.

Один из вариантов - назначить увеличивающийся числовой счетчик для наборов парней и девушек и использовать его в качестве оси X, чтобы их можно было собрать вместе.Так что ось X должна быть привязана к свойству "Counter", а bob / phil / dennis / chewie должны иметь соответствующие значения 0,1,2 и 3, и то же самое для Jamie через K. Вы можете стилизовать графикдля отображения фактического FirstName рядом с самой точкой данных или другим подобным методом.

...