سؤال

أرغب في عرض قائمة مهمة من العناصر باستخدام عناصر Control.

السبب في أنني أستخدم العناصر Control هو أن DatatEmplate أكثر تعقيدًا في التطبيق الذي أعمل عليه: يعكس رمز العينة المقدم فقط مشكلة التحجيم التي أمتلكها.

أود :

  • يجب أن تكون العناصر الافتراضية لأن هناك العديد من العناصر التي يجب عرضها
  • حجمها للتوسع في الحاوية الأم تلقائيًا (الشبكة)

    <Grid>
        <ItemsControl x:Name="My" ItemsSource="{Binding Path=Names}">
            <ItemsControl.Template>
                <ControlTemplate>
                    <StackPanel>
                        <StackPanel>
                            <TextBlock Text="this is a title" FontSize="15" />
                            <TextBlock Text="This is a description" />
                        </StackPanel>
                        <ScrollViewer CanContentScroll="True" Height="400px">
                            <VirtualizingStackPanel IsItemsHost="True" />
                        </ScrollViewer>
                    </StackPanel>
                </ControlTemplate>
            </ItemsControl.Template>
            <ItemsControl.ItemTemplate>
                <DataTemplate>
                    <TextBlock Text="{Binding}" />
                </DataTemplate>
            </ItemsControl.ItemTemplate>
        </ItemsControl>
    </Grid>
    

الرمز وراء:

public partial class Page1: Page
{
    public List<string> Names { get; set; }
    public Page1()
    {
        InitializeComponent();

        Names = new List<string>();
        for(int i = 0; i < 10000; i++)
            Names.Add("Name : " + i);

        My.DataContext = this;
    }
}

أثناء إجبار ارتفاع ScrollViewer على 400 بكسل ، يعمل المحاكاة الافتراضية لـ OutsControl كما أتوقع: يعرض العناصر Control القائمة بسرعة كبيرة ، بغض النظر عن عدد العناصر التي تحتوي عليها.

ومع ذلك ، إذا قمت بإزالة الارتفاع = "400px" ، فستوسع القائمة ارتفاعها لعرض القائمة بأكملها ، بغض النظر عن ارتفاع الحاوية الأم. أسوأ من ذلك: يبدو وراء حاويةها.

يعطي وضع ScrollViewer حول العناصر Control النتيجة المرئية المتوقعة ، لكن المحاكاة الافتراضية تختفي والقائمة تستغرق الكثير من الوقت لعرضها.

كيف يمكنني تحقيق التوسع التلقائي للارتفاع والمحاكاة الافتراضية الخاصة بي عناصر UnsControl؟

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

المحلول

تكمن المشكلة في heatscontrol.template: يمكنك استخدام StackPanel هناك ، مما يمنح أطفالها الكثير من الارتفاع كما يريدون. استبدله بشيء مثل

<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="Auto"/>
        <RowDefinition Height="*"/>
    </Grid.RowDefinitions>
    <StackPanel>
        <TextBlock Text="this is a title" FontSize="15" />
        <TextBlock Text="This is a description" />
    </StackPanel>
    <ScrollViewer CanContentScroll="True" Grid.Row="1">
        <VirtualizingStackPanel />
    </ScrollViewer>
</Grid>

ويجب أن تعمل بشكل جيد.

أتمنى أن يساعد ذلك.

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