2011-08-30 34 views
2

我對WPF和C#很陌生,並且試圖幫助一些GUI工作。我們基本上有3個部分,一個LHS(左側)[第一部分],一個RHS,具有頂部和底部[第2節和第3節]。看起來像這樣WPF控件,節約房地產

1 | 2 
1 | - 
1 | 3 

他們希望有一種方法可以通過點擊按鈕縮小每個部分。目前的|和 - 是間隔項目,可以拖動(編輯:這是使用他們不喜歡的網格)。我做了一點研究,看到有擴展器和手風琴項目。我不知道是否可以用於這種情況,什麼是最簡單的。在嘗試每一項操作時,由於我對它們不熟悉,因此會想到一些控件的其他問題。

Expander: 通過縮小第1部分,它會使第2節和第3節佔據整個屏幕?或者只能用手風琴來完成? 將<>圖標更改爲+圖標很難嗎?如果是這樣,那裏有任何教程?

手風琴: 可以將<>改爲+ - ?如果是這樣,那裏有任何教程? 藍色的默認顏色可以更改嗎?

TIA

+0

怎麼樣的電網分離器做他們不喜歡?外觀或行爲? –

+0

@townsean:他們不喜歡這種行爲。他們更喜歡點擊方法。煩我知道。 – Crystal

+1

關於縮放問題,獲得縮放行爲的一種方法是使用嵌套的DockPanel控件。或者,您可以使用正確選擇「自動」和「*」行/列的網格。任何想要使用擴展器摺疊的行/列都應該具有「自動」的高度/寬度。 –

回答

1

您可以使用GridSplitter。用戶可以拖動它們來改變大小。不是一個點擊 - 一個拖動。

<GridSplitter Grid.Row="1" Grid.Column="1" 
        Width="3" Background="Purple" VerticalAlignment="Stretch" HorizontalAlignment="Center" ShowsPreview="False" > 
+0

是的,我們現在有一個網格分割器,他們不喜歡它。在我的問題中,我現在明確地表明瞭這一點。 – Crystal

+0

他們對GridSplitter不喜歡什麼?用戶和恐怖分子有什麼區別?你可以與恐怖分子辯論。 – Paparazzi

+0

'最小化'與'分裂'是一個非常普遍的區別,這個比喻用於吞吐很多用戶界面。用戶喜歡在具有偶爾需要的功能時能夠「捲起」或「隱藏」面板區域,但不需要始終保持可見性。當您需要提供平行的信息視圖時,網格分離器更適合您。在這種情況下,正確的解決方案實際上可能是一個組合(一個可重新定義的邊界,但有一種方法可以「摺疊」一個面板。)這與Visual Studio提供的類似(以及其他Window對接功能)。 –

2

對於您的情況,Expander聽起來像是一個合適的選項。幸運的是,與Accordion控件不同,它包含在WPF中。但我發現這個問題與Accordion control有關,並認爲它對你有用。

要更改Expander切換按鈕的外觀,您需要修改其control template。將模板更改爲顯示加號或減號而不是箭頭並不太難。如果您訪問該鏈接,您會看到您將要更改模板的ExpanderToggleButton部分。

由於您只是想改變使用箭頭至使用加號/減號的方式,因此您可以簡單地更改坍縮/展開箭頭的Path數據。你可以看here更多infortmation繪製簡單的形狀與路徑。

Here是某人修改Expander的控件模板的示例。它的外觀不同,但如果你決定走這條路線,它應該很有用。

編輯:

真正簡單的例子(沒有切換按鈕外觀上的變化),以獲得如何collaspe和保存不動產的想法:

<Grid> 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition Width="Auto" /> 
     <ColumnDefinition Width="Auto" /> 
    </Grid.ColunmDefinitions> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="Auto" /> 
     <RowDefinition Height="Auto" /> 
    </Grid.RowDefinitions> 
    <Expander Name="Section1" Grid.RowSpan="2" Grid.Colunm="0" ExpandDirection="Left"> 
     <!-- Stuff goes here --> 
    </Expander> 
    <Expander Name="Section2" Grid.RowSpan="0" Grid.Colunm="1" 
     <!-- Stuff goes here --> 
    </Expander> 
    <Expander Name="Section3" Grid.RowSpan="1" Grid.Colunm="0" 
     <!-- Stuff goes here --> 
    </Expander> 
</Grid>