Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
WPF/AvalonDock:根据码头位置切换堆叠面板方向_Wpf_Avalondock - Fatal编程技术网

WPF/AvalonDock:根据码头位置切换堆叠面板方向

WPF/AvalonDock:根据码头位置切换堆叠面板方向,wpf,avalondock,Wpf,Avalondock,我正在使用AvalonDock在WPF中构建一个应用程序,部分原因是我认为它会很有用,但主要是为了教自己一些WPF,并习惯这种编程风格。我已经将应用程序的主“工具箱”构建为一个可固定的窗格,这样它就可以被移动、拉出或自动隐藏,这样用户就可以充分利用屏幕空间。在它里面,我使用StackPanel来排列各种按钮 当工具箱停靠在左侧或右侧时,是否有一种(相对简单的)方法使StackPanel垂直定向,而当工具箱停靠在顶部或底部时,是否有一种方法使StackPanel水平定向?我确信一定有某种方法可以将

我正在使用AvalonDock在WPF中构建一个应用程序,部分原因是我认为它会很有用,但主要是为了教自己一些WPF,并习惯这种编程风格。我已经将应用程序的主“工具箱”构建为一个可固定的窗格,这样它就可以被移动、拉出或自动隐藏,这样用户就可以充分利用屏幕空间。在它里面,我使用StackPanel来排列各种按钮


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

类似的方法如何:

您的StackPanel应如下所示:

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

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

这看起来是正确的。。。但在实施上有点困难;它可以编译,但在运行时它会通知我System.Windows.StaticResourceExtension上的“提供值”抛出了一个异常,我认为这是因为转换器上的
StaticResource
绑定。。。知道我做错了什么吗?你可能忘记在XAML资源中声明转换器了!添加转换器时,您必须始终执行以下操作:在
UserControl
(或
窗口
,或
页面
,或…第一个标记)打开标记中,添加:
xmlns:myTag=“clr命名空间:MyConverterNamespace”
(当然,
myTag
名称完全由您决定。Visual Studio应该建议自动完成名称空间)然后,在您的
资源中添加:=>这将在
静态资源中声明转换器
s=)啊,这解释了一些事情。我知道你必须这么做,但显然我做错了。仍然抛出一个错误,虽然。。。这是一个奇怪的。如果我取出您建议的StackPanel打开标签,并将其替换为基本的
,则它可以工作,但在您的版本中,它会在位之前的行上抛出一个异常,即
。我似乎不明白为什么。。。对不起,我一直在问问题;我是新来的。
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;
  }
}