العناصر ، و VirtualizingStackPanel و ScrollViewer ارتفاع
-
21-09-2019 - |
سؤال
أرغب في عرض قائمة مهمة من العناصر باستخدام عناصر 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>
ويجب أن تعمل بشكل جيد.
أتمنى أن يساعد ذلك.