我有WrapPanel,我希望它内部的控件水平居中,但是当我有一个列表框或ItemsControl时,这些元素就会向下移动。
<toolkit:WrapPanel>
<ItemsControl x:Name="AnswerListBox" ItemsSource="{Binding Answers}" ScrollViewer.VerticalScrollBarVisibility="Disabled" >
<ItemsControl.ItemTemplate>
<DataTemplate>
<!-- those don't wrap horizontally and go downwards -->
<local:spriteToggleButton Text="{Binding text}" Selected="{Binding selected}" Sprites="{Binding Path=DataContext.UISprites, ElementName=questionField}" IsChecked="{Binding selected, Mode=TwoWay}" GroupName="{Binding Path=DataContext.QuestionTitle, ElementName=questionField}" ClickMode="Press" />
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</toolkit:WrapPanel>
我遇到了一些类似的问题并且发现了关于ItemsPanel的内容,所以我尝试了但是它包装但仅包含内容并且没有显示其中的其余控件。
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<toolkit:WrapPanel />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
我认为ItemsPanel正在告诉ItemsControl哪个控件用它包装但是它似乎忽略了我的datatemplate的其余部分。
答案 0 :(得分:1)
约瑟夫,
在黑暗中略微射击;但这就是我使用WrapPanel的方式(而不是通过ItemControl)。
<ListBox>
<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<toolkit:WrapPanel Width="700" />
</ItemsPanelTemplate>
</ListBox.ItemsPanel>
<ListBox.ItemTemplate>
<DataTemplate>
....
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
基本上,Listbox的ItemsPanel告诉它使用WrapPanel然后你可以在DataTemplate中拥有你需要的任何东西。请注意,宽度很重要,因为它告诉WrapPanel从哪里开始包装。
这有帮助吗?