簡體   English   中英

.NET GridSplitter 調整一列的大小

[英].NET GridSplitter to resize one column

我的問題很具體,沒有在任何地方找到任何相關的內容。 所以我生命中的第一個問題,我們開始。 我是 WPF 和 XAML 全球新手,所以如果您有任何改進我的代碼的意見,請不要猶豫。

我試圖實現什么? 我有一個由 4 個菜單包圍的工作區。 這個菜單的可見性由頂部的切換按鈕決定,但我刪除了所有這些,所以我的代碼更清晰。 但我希望菜單的行為類似於彈出(我沒有使用彈出來真正控制 tjose 菜單在某個容器內的大小和位置)。 左側有 2 個菜單,右側有兩個菜單。 在每一側,兩個菜單不能同時打開。 同樣的事情,為了清楚起見,我把這一切都抹掉了。 我希望我的菜單可以調整大小。 但是我左邊的兩個菜單沒有相同的大小,應該單獨調整大小。

<Grid >
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="Auto"/>
        <ColumnDefinition Width="*"/>
        <ColumnDefinition Width="Auto"/>
    </Grid.ColumnDefinitions>
    <Grid Grid.Column="0" Background="Aqua" Name="LeftMenu">
        <Grid Name="LeftMenu1">
            <Grid.ColumnDefinitions>
                <ColumnDefinition MinWidth="200" MaxWidth="500" Width="300"/>
                <ColumnDefinition Width="5"/>
            </Grid.ColumnDefinitions>
            <Grid Grid.Column="0"  Name="MenuContent1"/>
            <GridSplitter Grid.Column="1" ResizeBehavior="PreviousAndCurrent" HorizontalAlignment="Stretch"/>
        </Grid>
    </Grid>
    <Grid Grid.Column="1" Name="Workspace"/>
    <Grid Grid.Column="2" Background="Aqua" Name="RightMenu">
        <Grid Name="RightMenu1">
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="5"/> 
                <ColumnDefinition MinWidth="200" MaxWidth="500" Width="300"/>
            </Grid.ColumnDefinitions>
            <GridSplitter Grid.Column="0" ResizeBehavior="CurrentAndNext" HorizontalAlignment="Stretch"/> 
            <Grid Grid.Column="1" Name="MenuContent2"/>
        </Grid>
    </Grid>

</Grid>

*我只在每一側顯示一個菜單,因為我刪除了可見性條件,但第二個菜單是相同的,除了寬度。

我的問題是什么? 如您所見,我使用 GridSplitter 調整組成每個菜單的一列網格的大小。 雖然我在左邊完全得到了我想要的行為,但它在右邊不起作用。 當我使用 Gridsplitter 時,gridsplitter 列(“當前”)被調整大小,而不是菜單列。 我使用了“CurrentandNext”值,因為它看起來合乎邏輯,但顯然還不夠。 如果我使用 maxWidth 和 minWidth 固定 GridSplitter 寬度,則不會重新調整任何內容,GridSplitter 不會移動。

我希望我足夠清楚,並歡迎任何幫助!

你這樣做是完全錯誤的。

GridSplitter 用於調整列和行的大小。

假設您有一個帶有列的網格:

<Grid Name="RightMenu1">
  <Grid.ColumnDefinitions>
    <ColumnDefinition Width="5"/> 
    <ColumnDefinition MinWidth="200" MaxWidth="500" Width="300"/>
  </Grid.ColumnDefinitions>

  <GridSplitter Grid.Column="0" HorizontalAlignment="Right" VerticalAlignment="Stretch" Width="3" Background="Black"/> 

  <Border Grid.Column="0" Background="Red" Margin="0,0,3,0"/>
  <Border Grid.Column="1" Background="Blue"/>
</Grid>

您必須將 GridSplitter 保持在兩列之間,以調整列的大小。 在這種情況下,右對齊水平並垂直拉伸。

我需要有兩個“面板”,不能同時打開,但大小不同......

我確實為WPF 如何僅使用 XAML 構建停靠的可調整大小的擴展器和網格的問題提供了解決方案 並且它也適用於您的問題。

您在調整列大小時犯了一些錯誤。

<Grid >
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="Auto"/>
        <ColumnDefinition Width="*"/>
        <ColumnDefinition Width="Auto"/>
    </Grid.ColumnDefinitions>
    <Grid Grid.Column="0" Background="Aqua" Name="LeftMenu">
        <Grid Name="LeftMenu1">
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="Auto"/>
                <ColumnDefinition />
            </Grid.ColumnDefinitions>
            <Grid Grid.Column="0"  Name="MenuContent1" MinWidth="200" MaxWidth="500" Width="300"/>
            <GridSplitter Grid.Column="1" ResizeBehavior="PreviousAndCurrent" HorizontalAlignment="Stretch" Width="5"/>
        </Grid>
    </Grid>
    <Grid Grid.Column="1" Name="Workspace"/>
    <Grid Grid.Column="2" Background="Aqua" Name="RightMenu">
        <Grid Name="RightMenu1">
            <Grid.ColumnDefinitions>
                <ColumnDefinition/>
                <ColumnDefinition Width="Auto"/>
            </Grid.ColumnDefinitions>
            <GridSplitter Grid.Column="0" ResizeBehavior="CurrentAndNext" HorizontalAlignment="Stretch" Width="5"/>
            <Grid Grid.Column="1" Name="MenuContent2" MinWidth="200" MaxWidth="500" Width="300"/>
        </Grid>
    </Grid>

</Grid>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM