我有一個網格與多個控件,我想選擇這些控件(或哪個網格列)將在中心,然後讓其他列/控件放置在相鄰的它。我會怎麼做?選擇中心控制/列
選擇中心控制/列
回答
更新:
以下模式:
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="MainControl's height"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="MainControl's width"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
將總是迫使MainControl
爲中心,只要其他控制將在*
部件來限定。換句話說,如果上述Grid
中的位置[1,1]
包含您的MainControl
,則可以爲位置[0,0]
,[0,1]
,...,[2,2]
定義具有不同行/列定義的不同Grids
,以在自定義位置包裝更多具有自定義大小的控件。
例如此XAML:
<Window Title="MainWindow" Height="600" Width="800" >
<Grid x:Name="myGrid">
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="200"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="200"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Grid Grid.Row="0" Grid.Column="0">
<Grid.RowDefinitions>
<RowDefinition Height="40"/>
<RowDefinition Height="50"/>
<RowDefinition Height="80"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="70"/>
<ColumnDefinition Width="150"/>
<ColumnDefinition Width="30"/>
</Grid.ColumnDefinitions>
<Button Grid.Row="0" Grid.Column="0" Content="0,0"/>
<Button Grid.Row="0" Grid.Column="1" Content="0,1"/>
<Button Grid.Row="1" Grid.Column="1" Content="1,1"/>
<Button Grid.Row="2" Grid.Column="2" Content="2,2"/>
</Grid>
<Button Background="LightBlue" Grid.Row="1" Grid.Column="1" Content="1,1"/>
<Grid Grid.Row="2" Grid.Column="2">
<Grid.RowDefinitions>
<RowDefinition Height="80"/>
<RowDefinition Height="35"/>
<RowDefinition Height="30"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="60"/>
<ColumnDefinition Width="90"/>
<ColumnDefinition Width="50"/>
</Grid.ColumnDefinitions>
<Button Grid.Row="0" Grid.Column="0" Content="0,0"/>
<Button Grid.Row="1" Grid.Column="0" Content="1,0"/>
<Button Grid.Row="1" Grid.Column="1" Content="1,1"/>
<Button Grid.Row="2" Grid.Column="0" Content="2,0"/>
<Button Grid.Row="2" Grid.Column="2" Content="2,2"/>
</Grid>
</Grid>
</Window>
將定位控制是這樣的:
什麼是你想在佈局方面實現?您的網格策略將決定整個佈局的行爲方式,特別是如果您期望它根據窗口大小進行縮放。如果您希望佈局對窗口大小做出反應,那麼您使用「自動」和「星形調整」策略。如果您實際上不關心調整大小,並且您希望有一個固定的佈局,那麼您可以在列之間共享網格大小。
方案1 如果你想實現純粹包含未知大小的物體中間列,該列必須完全居中,那麼你需要用左,右柱來緩衝這個中間列,根據Bahman_Aries的例子。
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
</Grid>
從這樣的結果是,因爲他們需要(所期望的呈現寬度)放置在中間列項會消耗盡可能多的寬度,並且兩個遺留列將一分爲二的剩餘空間,因爲每個具有1 *的值。換句話說,如果您的中間列對象請求200寬度,並且您的窗口總寬度爲1000,那麼左側和右側列將都有400(800/2)。
請注意,縮小窗口大小時,星號大小的列會裁剪您的內容。這是設計。如果你想讓你的比例持續下去,你可以考慮將你的佈局包裝在ViewBoxes(或整個網格)中。
方案2 - 如果你正在尋找的只是其中規定了,沒有關於縮放內容的網格,(重:中間一列消耗它需要什麼,然後將左,右列時,他們有同樣成長大內容),那麼你可以使用SharedSizeScope功能。
<Grid IsSharedSizeScope="True">
<Grid.ColumnDefinitions>
<ColumnDefinition SharedSizeGroup="MyRatio"/>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="Auto" SharedSizeGroup="MyRatio"/>
</Grid.ColumnDefinitions>
</Grid>
什麼,這將實現的是,每當你的第2列的增長,它也將傳播其大小以0列,本質上確保您的第1列始終居中。
與場景1的主要區別在於場景2根據其子元素具有固定大小,而場景1具有根據其父容器行爲的結構。
編輯:有一個明顯的例子情景1:
<Grid ShowGridLines="True">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"></ColumnDefinition>
<ColumnDefinition Width="Auto"></ColumnDefinition>
<ColumnDefinition Width="*"></ColumnDefinition>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="4*"></RowDefinition>
<RowDefinition Height="Auto"></RowDefinition>
<RowDefinition Height="*"></RowDefinition>
</Grid.RowDefinitions>
<StackPanel Grid.Row="1" x:Name="TheLeftComponents" Orientation="Horizontal" HorizontalAlignment="Right" >
<Ellipse Height="20" Width="20" Stroke="Black" StrokeThickness="1" ></Ellipse>
</StackPanel>
<Ellipse x:Name="TheMiddleComponent" Grid.Row="1" Grid.Column="1" Height="40" Width="40" Stroke="Black" StrokeThickness="1" ></Ellipse>
<StackPanel Grid.Row="1" Grid.Column="2" x:Name="TheRightComponents" Orientation="Horizontal" HorizontalAlignment="Left" >
<Ellipse Height="20" Width="20" Stroke="Black" StrokeThickness="1" ></Ellipse>
<Ellipse Height="20" Width="20" Stroke="Black" StrokeThickness="1" ></Ellipse>
<Ellipse Height="20" Width="20" Stroke="Black" StrokeThickness="1" ></Ellipse>
<Ellipse Height="20" Width="20" Stroke="Black" StrokeThickness="1" ></Ellipse>
<Ellipse Height="20" Width="20" Stroke="Black" StrokeThickness="1" ></Ellipse>
</StackPanel>
</Grid>
此解決方案也假定我的佈局是對稱的;如果我有我的「中心」列,左邊有1列,右邊有100列(我不知道任何東西的固定大小,因爲整個佈局根據內容改變大小)? – leetrobot
「居中」的定義是通過設計,在某件事情的中間。除非居中並不意味着在中間,否則你將不得不澄清你的問題,因爲當我閱讀它時,我明白你想要集中某個佈局項目。 – Gralo
如果您正在尋找一種佈局策略,允許您將未知數量的項目放到某一側,那麼您正在尋找一個DockPanel,並在您的對象上使用Dock.Left和Dock.Right屬性。您的「中間」元素將停靠在左側(例如),然後您添加的所有元素將爲「Dock.Right」。然後它就成爲適當放置你的觀點的問題。 – Gralo
- 1. 版本控制;選擇,選擇,選擇!
- 2. 控制GTK選擇
- 3. 控制選擇UITextView
- 4. 選擇控制器
- 5. 控制器選擇
- 6. 從序列控制選擇順序
- 7. Angularjs:在選擇控制選擇項目
- 8. 設置列表選項從控制器中選擇
- 9. 存儲陣列,以每個選項中選擇控制
- 10. Joomla版本控制選擇
- 11. 如何控制QListWidget選擇
- 12. wpf datagrid行選擇控制
- 13. 選擇控制和TAB鍵
- 14. 控制反轉和選擇
- 15. 選擇uisegmentation控制問題?
- 16. 選擇功能控制OpenLayers
- 17. Devexpress控制明確選擇?
- 18. 選擇控制在wpfgrid
- 19. 在Spring MVC控制器中選擇JsonView
- 20. 綁定控制值選擇DataGrid中值
- 21. 在sap.ui.table.Table中選擇行控制
- 22. Zend Framework從Plugin中選擇控制器
- 23. 如何控制gtk.IconView中的選擇?
- 24. Postgres中頻控制結構選擇
- 25. PHP Excel - 跨選擇中心
- 26. 從partialview中選擇列表的ID不傳遞給控制器
- 27. 從選擇列表中獲取值到控制器
- 28. 在Dashcode列表控制器中設置選擇
- 29. 查找控制在DataTemplate中使用多選擇列表框
- 30. sqlalchemy:控制從查詢中選擇的列
如果我的控制並不是對稱的,此項不工作(例如,我對列0,一個一個小的控制對第4欄有很大的控制)。此外,它迫使我指定我想要的動態大小的控件的固定大小。考慮以下XAML: <網格的HorizontalAlignment = 「中心」> <標籤內容= 「ASDF」 Grid.Column =「0」/> –
leetrobot
@leetrobot請參閱我的更新。 –