2012-06-11 89 views
1

我建立在WPF应用程序,使用AvalonDock开关StackPanel的方向,一方面是因为我认为这将是有用的,但主要是为了教自己一些WPF和习惯的那种风格一般编程。我已经将应用程序的主要“工具箱”构建为可停靠窗格,以便它可以移动,拉出或自动隐藏,以便用户可以充分利用其屏幕空间,并在其内部使用一个StackPanel来排列各种按钮。WPF/AvalonDock:根据码头的位置

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

回答

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; 
    } 
} 

我想这应该做的所有的魔法为你

+0

这看起来像是”沿着正确的路线......虽然实施它有点麻烦;它编译,但在运行时它通知我'提供值'System.Windows.StaticResourceExtension'抛出一个异常',我认为这是因为转换器上的'StaticResource'绑定...任何想法我是做错了? – anaximander

+0

您可能忘记在您的XAML资源中声明您的转换器!当您添加一个转换器,你总是要做到以下几点: 在你的'UserControl'(或'Window',或'Page',或...第一个标签)打开标签,添加: '的xmlns:myTag =” CLR命名空间:MyConverterNamespace“' (当然,'myTag'名称是完全取决于你的Visual Studio应该提出无论如何,就能自动命名空间。) 然后,在你的'Resources'(把它放在任何地方需要它的),加: =>这将宣告你的转换器在'StaticResource's =) – Damascus

+0

啊,这说明一些事情。我知道你必须这样做,但显然我做错了。 虽然...仍然抛出一个错误,这是一个奇怪的。如果我将StackPanel的开始标记提示出来并用一个基本的'替换它'然后它就起作用了,但是在你的版本中,它在你的位之前会引发一个异常, '。我似乎无法弄清楚为什么...抱歉不断提问;我对此很陌生。 – anaximander