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