/ / Najlepszy układ do pokazywania wielu wykresów wpf C # - wpf, układ, wykresy

Najlepszy układ do wyświetlania wielu wykresów wpf C # - wpf, layout, charts

Mam dziwny problem, że chcę wyświetlać wiele wykresów w czasie wykonywania, a czasami jeden wykres. Uprzejmie zasugeruj mi elastyczny układ, ponieważ w przyszłości będzie więcej wykresów.

obecnie używam grida, nie dzielę się moim kodem, ponieważ jest cały bałagan, ale pokazuję ci jego układ, który osiągnąłem dzięki układowi siatki.

                     ______________________________________
|                 |                  |
|                 |                  |
|     Chart 1     |     Chart 2      |
|                 |                  |
|-----------------|------------------|
|                 |                  |
|                 |                  |
|                 |                  |
|     Chart 3     |     Chart 4      |
|                 |                  |
-------------------------------------

A wykresy będą rosły w przyszłości Chcęelastyczny układ, który powinien pozwolić mi na umieszczenie pojedynczego wykresu na środku, a jeśli są cztery wykresy, powinny być pokazane w ten sposób, a drugi mądry pojedynczy wykres powinien być pokazany na środku.

Odpowiedzi:

1 dla odpowiedzi № 1

Dlaczego nie skorzystać z WrapPanel z suwakiem powiększania, który kontroluje rozmiar wykresów.

Jeśli jest jeden wykres, będziesz mógł powiększyć całą przestrzeń. Jeśli istnieje dowolna liczba, zostanie ona zawinięta na wiele linii.

Załóżmy, że Twoje wykresy są w kolekcji:

<ListBox ItemsSource="..." ScrollViewer.HorizontalScrollBarVisibility="Disabled">
<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<WrapPanel IsItemsHost="True" />
</ItemsPanelTemplate>
</ListBox.ItemsPanel>
<ListBox.ItemsTemplate>
<DataTemplate>
<YourChart Height="{Binding Path=Value, ElementName=_sizeSlider}" Stretch="Uniform" />
</DataTemplate>
</ListBox.ItemsTemplate>
</ListBox>

I suwak:

<Slider Name="_sizeSlider" Minimum="25" Maximum="500" Value="80" TickFrequency="1" HorizontalAlignment="Right" Width="113" />

0 dla odpowiedzi nr 2

Co powiesz na UniformGrid?


0 dla odpowiedzi № 3

Przykład jest zbyt duży, aby można go było zamieścić w komentarzach Ukrywanie wszystkich kolumn, aby pokazać pozostałą kolumnęśrodek ekranu nie działa, jeśli ustawisz jego pionowe i poziome wyrównanie w środku, to nie działa, raczej zmniejsza rozmiar i nie zmienia swojej lokalizacji ... więc Idea Flop ... sugeruje nowy układ * XAML

<Window
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
x:Class="MultipleChartsLayoutTesting.MainWindow"
x:Name="Window"
Title="MainWindow"
Width="640" Height="480">

<Grid x:Name="LayoutRoot">
<UniformGrid x:Name="uniformGrid" Margin="8" Cursor="Hand">
<Label Content="Label1" Background="AliceBlue" Name="lbl1" MouseDown="lbl1_MouseDown"></Label>

<Label Content="Label2" Background="Aqua" Name="lbl2" MouseDown="lbl2_MouseDown"></Label>

<Label Content="Label3" Background="Aquamarine" Name="lbl3" MouseDown="lbl2_MouseDown"></Label>

<Label Content="Label4" Background="Azure" Name="lbl4" MouseDown="lbl1_MouseDown"></Label>

<Label Content="Label5" Background="AliceBlue" Name="lbl5" MouseDown="lbl1_MouseDown"></Label>

<Label Content="Label6" Background="Aqua" Name="lbl6" MouseDown="lbl2_MouseDown"></Label>

<Label Content="Label7" Background="Aquamarine" Name="lbl7" MouseDown="lbl2_MouseDown"></Label>

<Label Content="Label8" Background="Azure" Name="lbl8" MouseDown="lbl1_MouseDown"></Label>
</UniformGrid>
</Grid>

PLIK CS

using System; using System.Collections.Rodzajowy; using System.Linq; using System.Text; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Shapes; using System.Windows.Controls.Primitives;  przestrzeń nazw MultipleChartsLayoutTesting { /// /// Logika interakcji dla MainWindow.xaml /// publiczna klasa częściowa MainWindow: Window { public MainWindow () { this.InitializeComponent (); lbl1.Visibility = Visibility.Hidden; lbl2.Visibility = Visibility.Hidden; lbl3.Visibility = Visibility.Hidden; lbl4.Visibility = Visibility.Hidden; lbl5.Visibility = Visibility.Hidden; lbl6.Visibility = Visibility.Hidden; lbl7.Visibility = Visibility.Hidden; } private void lbl1_MouseDown (nadawca obiektu, MouseButtonEventArgs e) {  lbl1.Background = System.Windows.Media.Brushes.Aqua;  lbl2.Background = System.Windows.Media.Brushes.White;  lbl3.Background = System.Windows.Media.Brushes.White;  lbl4.Background = System.Windows.Media.Brushes.Aqua;  lbl5.Background = System.Windows.Media.Brushes.Aqua;  lbl6.Background = System.Windows.Media.Brushes.White;  lbl7.Background = System.Windows.Media.Brushes.White;  lbl8.Background = System.Windows.Media.Brushes.Aqua;  }    private void lbl2_MouseDown (nadawca obiektu, MouseButtonEventArgs e) {  lbl1.Background = System.Windows.Media.Brushes.White;  lbl2.Background = System.Windows.Media.Brushes.Aqua;  lbl3.Background = System.Windows.Media.Brushes.Aqua;  lbl4.Background = System.Windows.Media.Brushes.White;   lbl5.Background = System.Windows.Media.Brushes.White;  lbl6.Background = System.Windows.Media.Brushes.Aqua;  lbl7.Background = System.Windows.Media.Brushes.Aqua;  lbl8.Background = System.Windows.Media.Brushes.White;  } } }