2011-01-25 2 views
0

Мы хотели бы использовать WrapPanel для отображения различного количества кнопок (фактически Usercontrols, которые ведут себя как кнопки). Внутри каждого WrapPanel есть элемент ItemsControl с его элементами. Часто WrapPanel не отображает все элементы - если их четыре, вы видите только один или два. Поведение несовместимо.Silverlight WrapPanel не отображает элементы последовательно

Есть ли что-то, что мы делаем неправильно? Существуют ли какие-либо известные проблемы с использованием WrapPanel?

Для XAML, это UserControl в главном окне:

<UserControl x:Name="ucCatalogContent" Grid.Row="2"> 
    <local:Catalog_CategoryView /> 

Это CategoryView разметки. У этого есть ItemControl. Его элементы и другие элементы управления UserControl с WrapPanel внутри них:

<UserControl 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    xmlns:sdk="http://schemas.microsoft.com/winfx/2006/xaml/presentation/sdk" 
    xmlns:toolkit="http://schemas.microsoft.com/winfx/2006/xaml/presentation/toolkit" 
    xmlns:local="clr-namespace:Catalog;assembly=Catalog" 
    x:Class="Catalog.Catalog_CategoryView" 
    > 

    <UserControl.Resources> 

      <DataTemplate x:Key="CategoryDT" > 
       <local:Category /> 
      </DataTemplate> 

    </UserControl.Resources> 

    <ScrollViewer x:Name="scvCatalogCategoryView" 
      HorizontalScrollBarVisibility="Disabled"> 

      <!-- This is the item that should be bound to the collection of categories --> 
      <ItemsControl x:Name="icCategories" 
       ItemTemplate="{StaticResource CategoryDT}" 
      > 

      <local:Category x:Name="item1" /> 
      <local:Category x:Name="item2" /> 
      <local:Category x:Name="item3" /> 

      </ItemsControl> 

    </ScrollViewer> 

И это отдельные категории, где используется WrapPanel:

<UserControl 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"  
    xmlns:sdk="http://schemas.microsoft.com/winfx/2006/xaml/presentation/sdk" 
    xmlns:toolkit="http://schemas.microsoft.com/winfx/2006/xaml/presentation/toolkit" 
    xmlns:custom="clr-namespace:CustomControlResources;assembly=CustomControlResources" 
    xmlns:local="clr-namespace:Catalog;assembly=Catalog" 
    x:Class="Catalog.Category" 
    > 

    <UserControl.Resources> 

      <ItemsPanelTemplate x:Key="CategoryItemPanel">        
       <toolkit:WrapPanel 
         VerticalAlignment="Top" 
         HorizontalAlignment="Stretch" 
         />                     
      </ItemsPanelTemplate> 


      <DataTemplate x:Key="OfferingDT" > 
       <local:OfferingTile x:Name="offeringTile" /> 
      </DataTemplate> 

    </UserControl.Resources> 

    <Grid x:Name="LayoutRoot" Style="{StaticResource ContentRootStyle}"> 

      <Grid.RowDefinitions> 
       <RowDefinition Height="Auto" /> 
       <RowDefinition Height="*" />      
      </Grid.RowDefinitions> 


      <custom:BlockExpander x:Name="expCategoryExpander" 
       Title="access [bind me]"> 

       <custom:BlockExpander.BlockExpanderContent> 

         <ItemsControl x:Name="icServiceOfferingsList" 
           ItemsPanel="{StaticResource CategoryItemPanel}" 
           ItemTemplate="{StaticResource OfferingDT}" 
           > 
           <local:OfferingTile /> 
           <local:OfferingTile /> 
           <local:OfferingTile /> 
           <local:OfferingTile /> 

         </ItemsControl>       

       </custom:BlockExpander.BlockExpanderContent> 

      </custom:BlockExpander> 

    </Grid> 

В этом скриншоте, должен быть заголовок на каждом заголовке расширителя (синим треугольником), и каждая группа должна содержать четыре элемента: wrappanels not showing all items

+0

Я думаю, это потому, что у вас есть элементы управления, завернутые в 'ScrollViewer' (плюс горизонтальная полоса прокрутки отключена). Средство просмотра прокрутки имеет бесконечную протяженность, поэтому элементы внутри, которые должны знать, что ширина родителя может работать неправильно. – ChrisF

+0

Это не кажется вероятным. Иногда все четкие отображаются во всех трех строках, иначе вы не получаете ни одной строки, ни два в один и три в другом. Также заголовок экспандера не отображается. – dex3703

ответ

0

Оказывается, было некоторое взаимодействие между расширителем UserControl и WrapPanel. Как только мы удалили codebehind, wrappanel вел себя нормально.

Мы работали над этим, разрабатывая расширитель Toolkit. Мы ранее не использовали инструментарий, но так как нам понадобилась обертка ....

Смежные вопросы