代码之家  ›  专栏  ›  技术社区  ›  TerrorAustralis

WPF手风琴垂直对齐错误

  •  2
  • TerrorAustralis  · 技术社区  · 15 年前


    使用最新WPF工具包中的Accordion控件,我遇到了这个问题。 当accordion控件的垂直对齐设置为“拉伸”时,如果SelectionMode设置为“One”,则其中包含的accordion项将不再展开。如果选择模式设置为“ZeroOrOne”,则在多次尝试单击后会得到展开。如果它被设置为“零或更多”一些真正时髦的东西发生在手风琴项目消失在屏幕底部!

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

    谢谢!

    3 回复  |  直到 15 年前
        1
  •  1
  •   user117785 user117785    15 年前

    此错误是由于每个手风琴项目的展开/折叠动画(同时展开和折叠时)的计时问题造成的

        2
  •  1
  •   Dave Clemmer manu    12 年前

    ActualHeight ActualWidth 要填充的父元素。这是一个有点黑客,但它会工作。

        3
  •  1
  •   Ddez    8 年前

    第一部分ScrollViewer的高度特性取决于手风琴的实际高度。要进行详细调整,可以更改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();
            }
        }
    }