ماذا يعني هذا MSDN نموذج التعليمات البرمجية تفعل ؟ - ItemsControl.ItemTemplate

StackOverflow https://stackoverflow.com/questions/1029577

سؤال

هذا هو XAML كود عينة مأخوذة من مكتبة MSDN المادة بالنسبة ItemsControl.ItemTemplate الملكية:

<ListBox Width="400" Margin="10" ItemsSource="{Binding Source={StaticResource myTodoList}}">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel>
<TextBlock Text="{Binding Path=TaskName}" />
<TextBlock Text="{Binding Path=Description}"/>
<TextBlock Text="{Binding Path=Priority}"/>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>  

أنا أبحث عن شرح الاستخدام <StackPanel> العنصر هو هذا المثال.
->
أين هو هذا الفريق ان يكون موجودا في ListBox?
ما هو الغرض في ItemTemplate?
يمكن لأي نظام.يقوم نظام ويندوز.الضوابط.لوحة تستخدم في مكانها ، على وجه التحديد الشبكة ؟
كيف يمكنني استخدام <Grid> عنصر القالب لكل عنصر في مربع القائمة?

هنا هو مفهوم أنا ذاهب ل:

http://img151.imageshack.us/img151/7960/graphconcept.png

لدي رسم بياني باستخدام <Path> عنصر, وليس هناك أي مشاكل هناك.

أنا أعمل على التسميات المجرات و أنا تجريب استخدام <Grid> عنصر في ItemTemplate - ولكن ليس لدي أي فكرة كيف الشبكة من المفترض أن تعمل في هذا السياق ، MSDN يقول شيئا عن الفريق في نموذج التعليمات البرمجية.

بلدي XAML على محور Y تسميات حاليا يبدو مثل هذا:

<ListBox Background="Transparent" BorderThickness="0" ItemsSource="{Binding Path=GraphLabelYData}">
<ListBox.ItemTemplate>  
<DataTemplate>  
<Grid>  
<Grid.RowDefinitions>  
<RowDefinition Height="{Binding Path=GraphLabelSpacing}" />  
</Grid.RowDefinitions>  
<Grid.ColumnDefinitions>  
<ColumnDefinition Width="Auto" />  
<ColumnDefinition Width="{Binding ElementName=GraphLabelYData, Path=GraphLabelMarkerLength}" />  
</Grid.ColumnDefinitions>  
<TextBlock HorizontalAlignment="Right" VerticalAlignment="Bottom" Text="{Binding Path=GraphLabelTag}" />  
<Rectangle Grid.Column="1" HorizontalAlignment="Stretch" VerticalAlignment="Bottom" Stroke="Black" Fill="Black" />  
</Grid>  
</DataTemplate>  
</ListBox.ItemTemplate>  
</ListBox>  

هل هذه النظرة صحيحة ؟ لا يظهر شيء في وقت التشغيل ، ولكن أريد أن تأكد من XAML غرار بشكل صحيح قبل بدء التصحيح البيانات-الارتباطات الخلفية التعليمات البرمجية.

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

المحلول

"أين هو هذا الفريق ان يكون موجودا في ListBox?" - Listbox جعل نسخة واحدة من كل عنصر في القائمة ، أيواحدة لكل عنصر في myTodoList جمع.حتى داخل كل عنصر في القائمة ، سيكون لديك ثلاث تسميات مكدسة واحدة فوق الأخرى.

"ما هو الغرض في ItemTemplate?" - لتجعل من الممكن أن تظهر أكثر من عنصر تحكم واحد لكل عنصر في ItemsSource.ItemTemplate ، مثل أشياء كثيرة في WPF ، يمكن أن يستغرق سوى طفل واحد عنصر, حتى إذا كنت تريد متعددة الأطفال تحتاج إلى تحديد كيف تريد منهم المنصوص عليها, و يمكنك القيام بذلك عن طريق إضافة لوحة (StackPanel في هذه الحالة).

"يمكن لأي نظام.يقوم نظام ويندوز.الضوابط.لوحة تستخدم في مكانها ، على وجه التحديد الشبكة؟" - يمكنك الرهان.

"كيف يمكنني استخدام <Grid> عنصر القالب لكل عنصر في مربع القائمة?" - بنفس الطريقة يجب أن تستخدم الشبكة في أي مكان آخر.انها لا تختلف ؛ انها مجرد أن ItemsControl (و تابع ، ListBox) سيتم إنشاء مثيلات متعددة من الشبكة الخاصة بك.ملاحظة على الرغم من أنه داخل ItemTemplate ، DataContext سوف تكون القائمة الحالية البند ، وبالتالي بك {Binding}s بالنسبة إلى تلك القائمة البند (ما لم يتم تحديد خلاف ذلك مع مثلElementName).

"هل هذا صحيح؟" - هذا حقا يجب أن يتم نشر مثل مسألة منفصلة, كما انها لا علاقة لها أسئلة حول MSDN العينة ، ومن أنا حتى لست متأكدا ما كنت تحاول القيام به.ولكن سأحاول الإجابة:وأظن أن هناك شيئا خطأ ، لأن كنت تستخدم اسم "GraphLabelYData" اثنين من الطرق المختلفة.في ColumnDefinition ، بقدر ما يمكنني أن أقول أنك علاج GraphLabelYData كما اسم XAML العنصر (أيكنت تبحث عن عنصر تحكم آخر في نافذة/الصفحة/UserControl مع Name="GraphLabelYData" أو x:Name="GraphLabelYData", و القراءة التي تحكم GraphLabelMarkerLength الممتلكات).ولكن في TextBlock أنت علاج GraphLabelYData اسم العقار على المجموعة الحالية البند.وأظن هذا غير صحيح.

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