1

私は WPF アプリケーションの初心者です。WPF アプリケーションを読み取るセンサーに取り組んでいます。このアプリケーションでは、170 個のセンサーからセンサーを選択する必要があります。私にとってはうまくいきます。

問題 :

ここでは、ページ サイズの制限により、グラフの高さが固定されています。しかし、センサーの数がグラフの高さを超えると、選択したセンサーの凡例によって、グラフの高さが調整されていないセンサーが非表示になります。凡例ボックスにスクロールを追加する方法ユーザーがすべてのセンサーの凡例をスクロールして確認できるようにします。

アイデアをください。

前もって感謝します。

4

2 に答える 2

1

この問題をウェブでたくさん検索しましたが、解決策がありませんでした。この問題を解決するには、次の手順に従います。

1.)最初に、plotter.LegendVisible=falseによってプロッタの凡例の可視性をfalseにします。

2.)次に、プロッタの凡例が表示されたグラフにリストビューコントロールを正確に追加します。

  <ListView Height="Auto" HorizontalAlignment="Center" Margin="1100,139,0,0" Name="listview" ItemsSource="{Binding Items}" HorizontalContentAlignment="Stretch" VerticalAlignment="Top" Width="75" Grid.RowSpan="2" MaxHeight="260">
                            <ListView.ItemTemplate>
                                <DataTemplate>
                                    <TextBlock Text="{Binding Text}" Foreground="{Binding BackgroundColor}">
                                    </TextBlock>
                                </DataTemplate>
                            </ListView.ItemTemplate>
                            <ListView.BorderBrush>
                                <SolidColorBrush />
                            </ListView.BorderBrush>
                        </ListView>

3.)次に、バックエンドで次のように作業を行います-

-ItemVM.csを追加します:

 class ItemVM : INotifyPropertyChanged
{
    private string TextValue = String.Empty;
    private Brush BackgroundColorValue = null;

    public event PropertyChangedEventHandler PropertyChanged;
    private void NotifyPropertyChanged(String info)
    {
        if (PropertyChanged != null)
        {
            PropertyChanged(this, new PropertyChangedEventArgs(info));
        }
    }

    public ItemVM(Brush color, string objectData)
    {
        BackgroundColor = color;
        Text = objectData;
    }
    public string Text
    {
        get
        {
            return this.TextValue;
        }

        set
        {
            if (value != this.TextValue)
            {
                this.TextValue = value;
                NotifyPropertyChanged("Text");
            }
        }
    }
    public Brush BackgroundColor
    {
        get
        {
            return this.BackgroundColorValue;
        }

        set
        {
            if (value != this.BackgroundColorValue)
            {
                this.BackgroundColorValue = value;
                NotifyPropertyChanged("BackgroundColor");
            }
        }
    }

}

-mainform.xaml.cs内:

 List<ItemVM> Items;
               List<string> lst = new List<string> {"item1","item2","item3" };
               var converter = new System.Windows.Media.BrushConverter();
  Color[] colors = ColorHelper.CreateRandomColors(3);
  Items = new List<ItemVM>();
 for(int i=0;i<lst.count;i++)
 {
 Items.Add(new ItemVM((Brush)converter.ConvertFromString(colors[i].ToString()), SelectedItems[i]));
}
 plotter.LegendVisible = false;
 listview.ItemsSource = Items;

今、私はスクロール付きのチャートプロッターに凡例ボックスを取得し、前の色を再表示してチャートの線の色も反映しています。

于 2012-05-09T06:24:01.173 に答える
0

ScrollViewerを使用します。

<ScrollViewer Height="whatever your graph height is">
  <ListView>
          ...Dynamically place all your sensors here from your Presenter or code-behind
  </ListView>
</ScrollViewer>

これはあなたのためにそれの世話をする必要があります。

于 2012-05-07T14:16:46.280 に答える