我们想使用WrapPanel来显示不同数量的按钮(实际上是像按钮一样的Usercontrols)。每个WrapPanel内部都有一个ItemsControl及其项目。通常情况下,WrapPanel不显示所有项目 - 如果有四个项目,则只显示一个或两个项目。行为不一致。
我们做错了吗?使用像这样的WrapPanel有任何已知问题吗?
对于XAML,这是我们主窗口中的UserControl:
<UserControl x:Name="ucCatalogContent" Grid.Row="2">
<local:Catalog_CategoryView />
这是CategoryView标记。这有ItemsControl。它的项目是其他UserControls,里面有一个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>
在此屏幕截图中,每个扩展器标题上应该有一个标题(蓝色三角形),每个组应包含四个项目:
答案 0 :(得分:0)
事实证明,扩展器UserControl和WrapPanel之间存在一些交互。一旦我们删除了代码隐藏,wrappanel就会正常运行。
我们通过设计Toolkit的扩展器来解决这个问题。我们以前没有使用工具包,但因为我们需要使用工具包....