Frage

ich brauche zwei Kontrollen zu erstellen, die die gleiche amound der Elemente (a dynamische Größe) enthalten, die erste Steuer stellt den Schlüssel, die zweiten, die Werte darstellt.

Ich brauche es so, dass, wenn der Benutzer die obere Spalte ändert die Größe Breite es die gleiche Spalte in der unteren Reihe (der Werte) beeinflussen sollte.

Hier ist ein Beispiel, was ich will:

<Window 
  DataContext="{Binding RelativeSource={RelativeSource Self}}"
  x:Class="MainWindow"
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
  <Window.Resources>
    <ItemsPanelTemplate x:Key="ItemsPanelTemplate">
      <VirtualizingStackPanel Orientation="Horizontal"/>
    </ItemsPanelTemplate>
  </Window.Resources>
  <StackPanel>
    <ItemsControl ItemsSource="{Binding Keys}" 
                  ItemsPanel="{StaticResource ItemsPanelTemplate}"/>
    <ItemsControl Grid.Row="1" ItemsSource="{Binding Values}" 
                  ItemsPanel="{StaticResource ItemsPanelTemplate}"/>
  </StackPanel>
</Window>

Imports System.Collections.Specialized
Class MainWindow
  Private Sub Window_Loaded(ByVal sender As Object,
                            ByVal e As RoutedEventArgs) Handles MyBase.Loaded
    DataContext =
      New StringDictionary From
      {
        {"key1", "value1"},
        {"key2", "value2"},
        {"key3", "value3"},
        {"key4", "value4"}
      }
  End Sub
End Class

Ergebnis:

Auch hier möchte ich in der Lage sein, ein Datagrid-ähnliche Steuerung zu schaffen, dass auch Träger Zellgrenzen und Zellbreiten und -höhen sollten zu den anderen Steuerungen angeschlossen werden width + ermöglichen Resize.

Ich ziehe es xamly getan werden. Hinweis: es ist eine individuelle Steuerung, so dass ich entsprechende Eigenschaften bei Bedarf erklären kann. aber nicht vergessen, die Höhen und die Breite der Zellen haben dynamisch und individuell auf bestimmte Spalten / Zeilen sein.

In Bezug auf dieser Frage, habe ich es auf eine etwas andere Art und Weise ( eine dritte Steuer für Zellen) mit, aber die Frage ist immer noch das gleiche, ich will die Höhe Breite der Spalten und Zellen dynamisch sein, und der Benutzer Fähigkeit, sie zu verkleinern geben sich gegenseitig zu beeinflussen.

UPDATE

decyclone Antwort ist etwas, was ich würde zu implementieren lieben, aber ich versuchte, das Beispiel, das er zur Verfügung gestellt die ItemsControl Eigenschaft auf true Grid.IsSharedSizeScopes Einstellung, aber es hat nicht funktioniert, hier ist das Ergebnis (abgeschnitten):

Ist es möglich, eine gemeinsame Größe Umfang zwischen zwei verschiedenen Steuerungen anwenden?

War es hilfreich?

Lösung

Ich habe versucht, etwas und scheint zu funktionieren:

XAML:

<Window x:Class="WpfApplication2.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:local="clr-namespace:WpfApplication2"
        Title="MainWindow"
        Height="350"
        Width="525">
    <Window.Resources>
        <local:GroupNameGenerator x:Key="GroupNameGenerator1" />
        <local:GroupNameGenerator x:Key="GroupNameGenerator2" />
    </Window.Resources>
    <Grid>
        <StackPanel Grid.IsSharedSizeScope="True">
            <ItemsControl Name="ItemsControl1">
                <ItemsControl.ItemsPanel>
                    <ItemsPanelTemplate>
                        <StackPanel Orientation="Horizontal" />
                    </ItemsPanelTemplate>
                </ItemsControl.ItemsPanel>
                <ItemsControl.ItemTemplate>
                    <DataTemplate>
                        <Grid>
                            <Grid.ColumnDefinitions>
                                <ColumnDefinition SharedSizeGroup="{Binding Converter={StaticResource GroupNameGenerator1}}" />
                            </Grid.ColumnDefinitions>
                            <Border BorderBrush="Black"
                                    BorderThickness="1"
                                    Margin="5"
                                    Padding="5">
                                <TextBlock Text="{Binding}" />
                            </Border>
                        </Grid>
                    </DataTemplate>
                </ItemsControl.ItemTemplate>
            </ItemsControl>
            <ItemsControl Name="ItemsControl2">
                <ItemsControl.ItemsPanel>
                    <ItemsPanelTemplate>
                        <StackPanel Orientation="Horizontal" />
                    </ItemsPanelTemplate>
                </ItemsControl.ItemsPanel>
                <ItemsControl.ItemTemplate>
                    <DataTemplate>
                        <Grid>
                            <Grid.ColumnDefinitions>
                                <ColumnDefinition SharedSizeGroup="{Binding Converter={StaticResource GroupNameGenerator2}}" />
                            </Grid.ColumnDefinitions>
                            <Border BorderBrush="Black"
                                    BorderThickness="1"
                                    Margin="5"
                                    Padding="5">
                                <TextBlock Text="{Binding}" />
                            </Border>
                        </Grid>
                    </DataTemplate>
                </ItemsControl.ItemTemplate>
            </ItemsControl>
        </StackPanel>
    </Grid>
</Window>

Code:

using System;
using System.Collections.Generic;
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.Navigation;
using System.Windows.Shapes;
using System.Collections.ObjectModel;

namespace WpfApplication2
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        ObservableCollection<Int32> list1 = new ObservableCollection<Int32>();
        ObservableCollection<String> list2 = new ObservableCollection<String>();

        public MainWindow()
        {
            InitializeComponent();

            for (int i = 0; i < 25; i++)
            {
                list1.Add(i + 1);
                list2.Add(new String('0', ((i + 1) / 3)));
            }

            ItemsControl1.ItemsSource = list1;
            ItemsControl2.ItemsSource = list2;
        }
    }

    public class GroupNameGenerator : IValueConverter
    {
        public Int32 Index { get; set; }

        public GroupNameGenerator()
        {
            Index = 0;
        }

        public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            return String.Format("Group{0}", ++Index);
        }

        public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            throw new NotImplementedException();
        }
    }
}

Andere Tipps

Hallo überprüfen Sie den folgenden Link für die Probe. sites.google.com/site/html5tutorials/ParallelDataBinding.zip

Die beigefügte Probe Säule optimiert. dh., Eine große Anzahl von Spalten und eine geringere Anzahl von Zeilen. Die Probe enthält 50K Spalten und 10 Reihen. Renders weniger als eine Sekunde.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top