2012-06-11 24 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