Anschluss Breite / Höhe der Zelle in zwei verschiedenen Kontrollen?
-
30-09-2019 - |
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.IsSharedSizeScope
s 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?
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.