سؤال

أريد أن أرتبط قائمة KEYVALUEPAIR بقائمة من المجالبات. اعتقدت أنني يجب أن تستخدم menuiten.headermplate، لكنها لم تنجح. أنا فقط حصلت على رؤوس فارغة.

            <MenuItem 
                Header="Template" 
                ItemsSource="{Binding Path=Samples}">
                <MenuItem.ItemTemplate>
                    <DataTemplate>
                        <MenuItem>
                            <MenuItem.HeaderTemplate>
                                <DataTemplate>
                                    <StackPanel Orientation="Horizontal">
                                        <TextBlock Text="{Binding Path=Key}" FontWeight="Bold"/>
                                        <TextBlock Text="{Binding Path=Value}" FontStyle="Italic" Margin="5,0,0,0"/>
                                    </StackPanel>
                                </DataTemplate>
                            </MenuItem.HeaderTemplate>                            </MenuItem>
                    </DataTemplate>
                </MenuItem.ItemTemplate>
            </MenuItem>

ثم استبدلت menuitem.headermplate مع menuitem.header، عملت.

            <MenuItem 
                Header="Template" 
                ItemsSource="{Binding Path=Samples}">
                <MenuItem.ItemTemplate>
                    <DataTemplate>
                        <MenuItem>
                            <MenuItem.Header>
                                <StackPanel Orientation="Horizontal">
                                    <TextBlock Text="{Binding Path=Key}" FontWeight="Bold"/>
                                    <TextBlock Text="{Binding Path=Value}" FontStyle="Italic" Margin="2,0,0,0"/>
                                </StackPanel>
                            </MenuItem.Header>
                        </MenuItem>
                    </DataTemplate>
                </MenuItem.ItemTemplate>
            </MenuItem>

هل يمكن لأي شخص أن يفسر لي لماذا لا يعمل الاستقصاء هنا؟

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

المحلول

نظرا لأن Headertemplate لا يملك الوصول إلى البيانات التي يجري ملزمة عنصر القائمة.

نصائح أخرى

ميكا صحيحة. في النهج الأول أخبرته عن عنصر القائمة كيفية قالب نفسه ولكن لم تخبره أبدا ما هي البيانات التي يرتبط بها! الأعمال التالية:

            <MenuItem 
            Header="Template" 
            ItemsSource="{Binding Path=Samples}">
            <MenuItem.ItemTemplate>
                <DataTemplate>
                    <MenuItem Header="{Binding}">
                        <MenuItem.HeaderTemplate>
                            <DataTemplate>
                                <StackPanel Orientation="Horizontal">
                                    <TextBlock Text="{Binding Path=Key}" FontWeight="Bold"/>
                                    <TextBlock Text="{Binding Path=Value}" FontStyle="Italic" Margin="5,0,0,0"/>
                                </StackPanel>
                            </DataTemplate>
                        </MenuItem.HeaderTemplate>
                     </MenuItem>
                </DataTemplate>
            </MenuItem.ItemTemplate>
        </MenuItem>

الغرض من القالب هو إضافة بعض العناصر إلى VisualTree. يستخدم Datatemplate للعناصر الفرعية ([Sub] Menuitem، ListBoxitem في ListBox، وهلم جرا) ويتم تطبيقه على حامل العناصر، فمن الصعب على التحكم في التحكم، يتم تطبيق Wich على التحكم نفسه. ما فعلته بالفعل بهذا

<MenuItem 
            Header="Template" 
            ItemsSource="{Binding Path=Samples}">
            <MenuItem.ItemTemplate>
                <DataTemplate>
                       ....
   </DataTemplate>
  </MenuItem.ItemTemplate>
</MenuItem>

يخبر "أريد أن تأخذ menuitem المحتوى وإدراج البيانات، يجب تصور Wich ". ثم أدخل هذه النقاط المتمرين:

 <MenuItem Header="{Binding}">... </MenuItem>

لذلك تقوم بإدراج عنصر قائمة إضافي لعنصر قائمة التكرار حاليا. لا أستطيع أن أرى النقطة. التالي هو أكثر واضحة:

 <MenuItem Header="Template" ItemsSource="{Binding Samples}">
         <MenuItem.Resources>
            <Style TargetType="{x:Type MenuItem}">
               <Setter Property="Command" Value="{Binding SomeCommand}" />
            </Style>            
        </MenuItem.Resources>
       <MenuItem.ItemTemplate>
          <DataTemplate>
              <TextBlock Text="{Binding Name}" />
          </DataTemplate>             
       </MenuItem.ItemTemplate>
    </MenuItem>

يجب أن يكون تعريف Headertemplate DataTemplate، وليس محتوى UI المباشر:

...
<MenuItem.HeaderTemplate>
    <DataTemplate>
        <StackPanel Orientation="Horizontal">
            <TextBlock Text="{Binding Path=Key}" FontWeight="Bold"/>
            <TextBlock Text="{Binding Path=Value}" FontStyle="Italic" Margin="2,0,0,0"/>
        </StackPanel>
    </DataTemplate>
</MenuItem.HeaderTemplate>
...
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top