WPF Accordion VerticalAlignment错误

时间:2010-09-27 07:02:27

标签: wpf accordion vertical-alignment


使用最新的WPF工具包中的Accordion控件,我遇到了这个问题。 当手风琴控件的VerticalAlignment设置为'Stretch'时,如果SelectionMode设置为'One',则其中包含的AccordionItem将不再展开。如果选择模式设置为“ZeroOrOne”,则在多次单击尝试后会进行扩展。如果设置为'ZeroOrMore',一些非常时髦的东西会发生在屏幕底部缺少手风琴项目的地方!

有人找到了解决这个问题的方法吗?

谢谢!

3 个答案:

答案 0 :(得分:1)

一个OK的解决方法是将ActualHeightActualWidth绑定到您希望它填充的父元素。这有点像黑客但它会起作用。

答案 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();
        }
    }
}