2010-09-27 64 views
2


从最新的WPF工具包中使用Accordion控件,我遇到了这个问题。 当手风琴控制的VerticalAlignment设置为'Stretch'时,如果SelectionMode设置为'One',则其中包含的AccordionItems将不再展开。如果选择模式设置为'ZeroOrOne',您在点击几次后会获得扩展。如果它被设置为'ZeroOrMore',一些非常时髦的东西发生在手风琴项目从屏幕底部丢失的地方!WPF Accordion VerticalAlignment bug

任何人都发现了这个问题的解决方案?

谢谢!

+0

我没有在我用手风琴看到了这一点,目前的版本截至今天,在.NET 4.0应用程序 – Marcel 2011-06-15 16:35:50

回答

1

确定的解决方法是将ActualHeightActualWidth绑定到您希望它填充的父元素。这有点破解,但它会起作用。

+0

你能分享您的片段此? – mehul9595 2012-09-12 06:58:12

1

您还可以将Accordion SelectionSequence属性设置为CollapseBeforeExpand。

这个错误是由于每个手风琴项目的展开/折叠动画(当同时展开和折叠时)与 的布局更新有关,这会弥补可用于展开的大小。

+0

我会看看这个!我希望它能起作用,如果是的话,你为我节省了很多时间 – TerrorAustralis 2010-10-08 22:10:20

1

首先,我为重新激活一个非常古老的主题appologise,但下面的代码可以说明TerrorAustralis响应。

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