WPF / AvalonDock:根据停靠位置切换StackPanel方向

时间:2012-06-11 12:57:32

标签: wpf avalondock

我正在使用AvalonDock在WPF中构建一个应用程序,部分原因是我觉得它很有用,但主要是为了自学一些WPF并且习惯于一般的编程风格。我已经将应用程序的主要“工具箱”构建为可停靠窗格,以便可以移动,拉出或自动隐藏,以便用户可以充分利用其屏幕空间,并且在其中,我正在使用一个StackPanel来安排各种按钮。

当工具箱停靠在左侧或右侧时,是否有(相对简单的)方法让StackPanel垂直定向,而当停靠在顶部或底部时,是否水平定位?我确信必须有某种方法将方向绑定到某个东西而不是直接设置它,但我似乎找不到任何有用的东西来绑定它。

1 个答案:

答案 0 :(得分:3)

这样的事情怎么样:

您的StackPanel应如下所示:

<StackPanel Orientation="{Binding DockableStyle, 
                         RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Avalon:DockableContent}},
                         Converter={StaticResource MyConverter}">
  <!-- StackPanel content here -->
</StackPanel>

您的Myconverter具有以下Convert方法:

public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
  DockableStyle style = value as DockableStyle
  if (style == DockableStyle.TopBorder || style == DockableStyle.BottomBorder)
  {
     return Orientation.Horizontal;
  }
  else
  {
     return Orientation.Vertical;
  }
}

我认为这应该为你做所有的魔力