我想重现类似于Outlook栏的行为,并找到了WPFToolkit的Accordion控件。我已经从WPFToolkit(2010年2月)示例应用程序中创建了一个测试应用程序(如下),我很难理解它的行为。
<Window x:Class="AccordionTest.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:toolkit="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Layout.Toolkit"
xmlns:system="clr-namespace:System;assembly=mscorlib"
Title="MainWindow" Height="350" Width="525" Background="DimGray">
<Grid Background="Red">
<toolkit:Accordion x:Name="acc" SelectionMode="One" VerticalAlignment="Stretch" HorizontalAlignment="Stretch">
<toolkit:AccordionItem Content="item 1" Header="Item 1" />
<toolkit:AccordionItem Content="item 2" Header="Item 2" />
<toolkit:AccordionItem Content="item 3" Header="Item 3" />
</toolkit:Accordion>
</Grid>
我将VerticalAlignment
设置为Stretch
,手风琴本身从表单的顶部延伸到底部,但手风琴项目没有。最初,第一个项目("项目1")被拉伸,但如果我选择其他项目,它们不会展开和拉伸以填充空间。
因此,Outlook行为似乎在加载时起作用,但当我选择项目时,控件的行为并不像预期的那样。
有什么想法吗?
在搜索了更多关于VerticalAlignment的信息后,我发现这篇文章有一个解决方案:
也可以将Accordion SelectionSequence属性设置为CollapseBeforeExpand。
这个错误是由于每个手风琴项目的展开/折叠动画的时间问题(当展开和折叠同时发生时)和手风琴的布局更新混淆了可用于展开的大小。
这似乎解决了我的问题。