使用最新的WPF工具包中的Accordion控件,我遇到了这个问题。
当手风琴控件的VerticalAlignment设置为'Stretch'时,如果SelectionMode设置为'One',则其中包含的AccordionItem将不再展开。如果选择模式设置为“ZeroOrOne”,则在多次单击尝试后会进行扩展。如果设置为'ZeroOrMore',一些非常时髦的东西会发生在屏幕底部缺少手风琴项目的地方!
有人找到了解决这个问题的方法吗?
谢谢!
答案 0 :(得分:1)
一个OK的解决方法是将ActualHeight
和ActualWidth
绑定到您希望它填充的父元素。这有点像黑客但它会起作用。
答案 1 :(得分:1)
您还可以将Accordion SelectionSequence属性设置为CollapseBeforeExpand。
这个错误是由于每个手风琴项目的扩展/折叠动画的时间问题(当扩展和折叠同时发生时) 手风琴的布局更新会影响可扩展的尺寸。
答案 2 :(得分:1)
首先,我为重新激活一个非常古老的主题而道歉,但以下代码可以说明TerrorAustralis的回应。
第1部分ScrollViewer的Heigth属性取决于Accordion的ActualHeigth。要进行详细调整,您可以更改ConverterParameter值。
<UserControl ...
xmlns:local="clr-namespace:MyProject.namespace.converters"
xmlns:lTk="clr-namespace:System.Windows.Controls;assembly=DotNetProjects.Layout.Toolkit">
<lTk:Accordion HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
<lTk:Accordion.Resources>
<local:RemoveMarginConverter x:Key="RemoveMarginConverter"/>
<Style TargetType="lTk:AccordionItem">
<Setter Property="HorizontalContentAlignment" Value="Stretch"/>
<Setter Property="VerticalContentAlignment" Value="Stretch"/>
</Style>
</lTk:Accordion.Resources>
<lTk:AccordionItem Header="Part 1">
<ScrollViewer VerticalScrollBarVisibility="Auto" Background="White"
Height="{Binding RelativeSource={RelativeSource FindAncestor,AncestorType={x:Type lTk:Accordion}},
Path=ActualHeight, Converter={StaticResource RemoveMarginConverter}, ConverterParameter=px50}">
<!-- Part 1 content -->
</ScrollViewer>
</lTk:AccordionItem>
<lTk:AccordionItem Header="Part 2">
<ScrollViewer VerticalScrollBarVisibility="Auto" Background="White">
<!-- Part 2 content -->
</ScrollViewer>
</lTk:AccordionItem>
</lTk:Accordion>
</UserControl>
转换器的代码:
using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Data;
namespace MyProject.namespace.converters
{
public class RemoveMarginConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
var val = System.Convert.ToInt32(value);
var margin = System.Convert.ToInt32(parameter.ToString().Replace("px", ""));
return val - margin;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
}