/ / Bestes Layout zum Anzeigen mehrerer Diagramme wpf C # - wpf, Layout, Diagramme

Bestes Layout zum Anzeigen mehrerer Diagramme wpf C # - wpf, Layout, Diagramme

Ich habe ein seltsames Problem, dass ich zur Laufzeit mehrere Diagramme und manchmal ein einzelnes Diagramm anzeigen möchte. Bitte schlagen Sie mir ein flexibles Layout vor, da es in Zukunft mehr Diagramme geben wird.

Derzeit verwende ich Grid. Ich teile meinen Code nicht, weil alles chaotisch ist, aber ich zeige Ihnen das Layout, das ich mit dem Grid-Layout erreicht habe.

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

Und die Charts werden in Zukunft zunehmenFlexibles Layout, das es mir ermöglichen sollte, ein einzelnes Diagramm in der Mitte zu zeigen, und wenn es vier Diagramme gibt, sollten sie so angezeigt werden, dass dieses andere weise einzelne Diagramm in der Mitte angezeigt werden sollte.

Antworten:

1 für die Antwort № 1

Verwenden Sie ein WrapPanel mit einem Zoomregler, der die Größe der Diagramme steuert.

Wenn es ein Diagramm gibt, können Sie den gesamten Bereich vergrößern. Wenn es eine beliebige Zahl gibt, wird diese in mehrere Zeilen eingeschlossen.

Angenommen, Ihre Diagramme befinden sich in einer Sammlung:

<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>

Und der Schieberegler:

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

0 für die Antwort № 2

Wie wäre es mit UniformGrid?


0 für die Antwort № 3

Das Beispiel ist zu groß, um in Kommentaren veröffentlicht zu werden Alle Spalten ausblenden, um die verbleibende Spalte anzuzeigenDie Mitte des Bildschirms hat keine Auswirkung, wenn Sie die vertikale und horizontale Ausrichtung in die Mitte einstellen. Sie funktioniert nicht, verringert jedoch die Größe und ändert die Position nicht. Idea Flop ... schlägt ein neues Layout vor * 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>

CS-DATEI

using System; Verwenden von System.Collections.Generisch; 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;  Namespace MultipleChartsLayoutTesting { /// /// Interaktionslogik für MainWindow.xaml /// öffentliche Teilklasse MainWindow: Window { öffentliches 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 (Objektabsender, 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 (Objektabsender, 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;  }} }} }}