سؤال

أحتاج إلى إنشاء عناصر تحكمين تحتويان على نفس العناصر (كمية ديناميكية) ، ويمثل عنصر التحكم الأول المفاتيح ، والثاني يمثل القيم.

أحتاجه حتى عندما يقوم المستخدم بتغيير عرض العمود العلوي ، يجب أن يؤثر على العمود نفسه في الصف السفلي (من القيم).

إليك مثال على ما أريد:

<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

نتيجة:

مرة أخرى ، أريد أن أكون قادرًا على إنشاء عنصر تحكم يشبه بيانات البيانات التي تدعم حتى حدود الخلايا وعرض الخلايا وارتفاعها بعرض عناصر التحكم الأخرى + السماح بتغيير حجمها.

أنا أفضل أن يتم xamly. ملاحظة: إنه عنصر تحكم مخصص ، حتى أتمكن من إعلان الخصائص المناسبة إذا لزم الأمر. ولكن تذكر أن ارتفاعات الخلايا وعرضها يجب أن تكون ديناميكية وفردية إلى أعمدة/صفوف محددة.

بالنسبة إلى هذه سؤال ، لقد قمت بإنشائها بطريقة مختلفة قليلاً (ذات عنصر تحكم ثالث للخلايا) ، لكن السؤال لا يزال كما هو ، أريد أن يكون عرض الارتفاع للأعمدة والخلايا ديناميكية ، ويمنح المستخدم قدرة على تغيير حجمها بعضهم البعض.

تحديث

إجابة ديسيكلون هو شيء أود تنفيذه ، لكنني جربت المثال الذي قدمه تعيين ItemsControlس' Grid.IsSharedSizeScope خاصية إلى صواب ، لكنها لم تنجح ، ها هي النتيجة (اقتصاص):

هل من الممكن تطبيق نطاق الحجم المشترك بين عناصر تحكم مختلفة؟

هل كانت مفيدة؟

المحلول

جربت شيئًا ويبدو أنه يعمل:

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>

شفرة :

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();
        }
    }
}

نصائح أخرى

مرحبًا ، تحقق من الرابط التالي للعينة.sites.google.com/site/html5Tutorials/ParalledDatabinding.zip

العينة المرفقة تم تحسين العمود. أي ، عدد كبير من الأعمدة وعدد أقل من الصفوف. تحتوي العينة على 50 كيلو بايت و 10 صفوف. يجعل أقل ثم ثانية.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top