C#WPF调整网格行大小控件以填充所有宽度

C#WPF调整网格行大小控件以填充所有宽度,wpf,grid,resize,width,row,Wpf,Grid,Resize,Width,Row,我试图让我的组合框拉伸以使用扩展窗口中的所有空白。如果窗口的宽度缩小,工具栏托盘将塌陷 我使用的网格有两列,宽度分别指定为*&300。 如何使组合框填充行中的所有可用空间 只需更改列宽定义: <Grid DockPanel.Dock="Top"> <Grid.ColumnDefinitions> <ColumnDefinition Width="Auto" /> <ColumnD

我试图让我的组合框拉伸以使用扩展窗口中的所有空白。如果窗口的宽度缩小,工具栏托盘将塌陷

我使用的网格有两列,宽度分别指定为*&300。 如何使组合框填充行中的所有可用空间


只需更改列宽定义:

    <Grid DockPanel.Dock="Top">
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="Auto" />
            <ColumnDefinition Width="*" />
        </Grid.ColumnDefinitions>

默认情况下,组合框的水平和垂直对齐设置为“拉伸”

可能是第一列,您可以输入硬编码大小

但是,如果您的GUI需要更多的空间来变得更好,请在工具栏托盘和组合框周围留出一些空白


关于

只需更改列宽定义:

    <Grid DockPanel.Dock="Top">
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="Auto" />
            <ColumnDefinition Width="*" />
        </Grid.ColumnDefinitions>

默认情况下,组合框的水平和垂直对齐设置为“拉伸”

可能是第一列,您可以输入硬编码大小

但是,如果您的GUI需要更多的空间来变得更好,请在工具栏托盘和组合框周围留出一些空白


关于

只需更改列宽定义:

    <Grid DockPanel.Dock="Top">
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="Auto" />
            <ColumnDefinition Width="*" />
        </Grid.ColumnDefinitions>

默认情况下,组合框的水平和垂直对齐设置为“拉伸”

可能是第一列,您可以输入硬编码大小

但是,如果您的GUI需要更多的空间来变得更好,请在工具栏托盘和组合框周围留出一些空白


关于

只需更改列宽定义:

    <Grid DockPanel.Dock="Top">
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="Auto" />
            <ColumnDefinition Width="*" />
        </Grid.ColumnDefinitions>

默认情况下,组合框的水平和垂直对齐设置为“拉伸”

可能是第一列,您可以输入硬编码大小

但是,如果您的GUI需要更多的空间来变得更好,请在工具栏托盘和组合框周围留出一些空白

关于

使用HorizontalAlignment=“Strech”

请参阅下面的代码

<ComboBox Grid.Column="1" MinWidth="200" HorizontalAlignment="Stretch"></ComboBox>

使用HorizontalAlignment=“Strech”

请参阅下面的代码

<ComboBox Grid.Column="1" MinWidth="200" HorizontalAlignment="Stretch"></ComboBox>

使用HorizontalAlignment=“Strech”

请参阅下面的代码

<ComboBox Grid.Column="1" MinWidth="200" HorizontalAlignment="Stretch"></ComboBox>

使用HorizontalAlignment=“Strech”

请参阅下面的代码

<ComboBox Grid.Column="1" MinWidth="200" HorizontalAlignment="Stretch"></ComboBox>

好的,如果你想让工具栏完全崩溃,我找到的唯一解决方案就是写一点代码。 仅在XAML中使用布局会更加优雅,但有时C#代码是唯一的方法

  • 摆脱网格:

  • 处理画布的大小调整:

    private void ToolbarSizeChanged(object sender, SizeChangedEventArgs e)
    {
        const double COMBO_MIN_DESIRED_WIDTH = 300.0;
        Size newSize = e.NewSize;
    
        Size sizeToolbarTray = new Size(Double.PositiveInfinity, newSize.Height);
        // measure to update DesiredSize
        toolBarTray.Measure(sizeToolbarTray);
    
        Rect toolBarTrayRect = new Rect(0, 0, 0, newSize.Height);
        Rect comboRect =new Rect(0,0,0,newSize.Height);
    
        // 3 cases :
    
        // 1) Much space is available
        if (newSize.Width > toolBarTray.DesiredSize.Width + COMBO_MIN_DESIRED_WIDTH)
        {
            toolBarTrayRect.Width = toolBarTray.DesiredSize.Width;
            comboRect.X = toolBarTrayRect.Width;
            comboRect.Width = newSize.Width -toolBarTrayRect.Width;
    
        }
        // 2) Space to show Combo, but not totally toolbar
        else if (newSize.Width > COMBO_MIN_DESIRED_WIDTH)
        {
            toolBarTrayRect.Width = newSize.Width - COMBO_MIN_DESIRED_WIDTH;
            comboRect.X = toolBarTrayRect.Width;
            comboRect.Width = COMBO_MIN_DESIRED_WIDTH;
        }
        // 3) Not enough space to show toolbar
        else
        {
            toolBarTrayRect.Width = 0;
            comboRect.Width = newSize.Width;
        }
        // Layout the two components :
        toolBarTray.Arrange(toolBarTrayRect);
        combobox.Arrange(comboRect);
    }
    
  • 这里有一个指向工作解决方案的链接,您可以检查它是否符合您的要求:


    希望我理解了你的愿望并对你有所帮助,好吧,如果你想让工具栏完全崩溃,我找到的唯一解决办法就是写一点代码。 仅在XAML中使用布局会更加优雅,但有时C#代码是唯一的方法

  • 摆脱网格:

  • 处理画布的大小调整:

    private void ToolbarSizeChanged(object sender, SizeChangedEventArgs e)
    {
        const double COMBO_MIN_DESIRED_WIDTH = 300.0;
        Size newSize = e.NewSize;
    
        Size sizeToolbarTray = new Size(Double.PositiveInfinity, newSize.Height);
        // measure to update DesiredSize
        toolBarTray.Measure(sizeToolbarTray);
    
        Rect toolBarTrayRect = new Rect(0, 0, 0, newSize.Height);
        Rect comboRect =new Rect(0,0,0,newSize.Height);
    
        // 3 cases :
    
        // 1) Much space is available
        if (newSize.Width > toolBarTray.DesiredSize.Width + COMBO_MIN_DESIRED_WIDTH)
        {
            toolBarTrayRect.Width = toolBarTray.DesiredSize.Width;
            comboRect.X = toolBarTrayRect.Width;
            comboRect.Width = newSize.Width -toolBarTrayRect.Width;
    
        }
        // 2) Space to show Combo, but not totally toolbar
        else if (newSize.Width > COMBO_MIN_DESIRED_WIDTH)
        {
            toolBarTrayRect.Width = newSize.Width - COMBO_MIN_DESIRED_WIDTH;
            comboRect.X = toolBarTrayRect.Width;
            comboRect.Width = COMBO_MIN_DESIRED_WIDTH;
        }
        // 3) Not enough space to show toolbar
        else
        {
            toolBarTrayRect.Width = 0;
            comboRect.Width = newSize.Width;
        }
        // Layout the two components :
        toolBarTray.Arrange(toolBarTrayRect);
        combobox.Arrange(comboRect);
    }
    
  • 这里有一个指向工作解决方案的链接,您可以检查它是否符合您的要求:


    希望我理解了你的愿望并对你有所帮助,好吧,如果你想让工具栏完全崩溃,我找到的唯一解决办法就是写一点代码。 仅在XAML中使用布局会更加优雅,但有时C#代码是唯一的方法

  • 摆脱网格:

  • 处理画布的大小调整:

    private void ToolbarSizeChanged(object sender, SizeChangedEventArgs e)
    {
        const double COMBO_MIN_DESIRED_WIDTH = 300.0;
        Size newSize = e.NewSize;
    
        Size sizeToolbarTray = new Size(Double.PositiveInfinity, newSize.Height);
        // measure to update DesiredSize
        toolBarTray.Measure(sizeToolbarTray);
    
        Rect toolBarTrayRect = new Rect(0, 0, 0, newSize.Height);
        Rect comboRect =new Rect(0,0,0,newSize.Height);
    
        // 3 cases :
    
        // 1) Much space is available
        if (newSize.Width > toolBarTray.DesiredSize.Width + COMBO_MIN_DESIRED_WIDTH)
        {
            toolBarTrayRect.Width = toolBarTray.DesiredSize.Width;
            comboRect.X = toolBarTrayRect.Width;
            comboRect.Width = newSize.Width -toolBarTrayRect.Width;
    
        }
        // 2) Space to show Combo, but not totally toolbar
        else if (newSize.Width > COMBO_MIN_DESIRED_WIDTH)
        {
            toolBarTrayRect.Width = newSize.Width - COMBO_MIN_DESIRED_WIDTH;
            comboRect.X = toolBarTrayRect.Width;
            comboRect.Width = COMBO_MIN_DESIRED_WIDTH;
        }
        // 3) Not enough space to show toolbar
        else
        {
            toolBarTrayRect.Width = 0;
            comboRect.Width = newSize.Width;
        }
        // Layout the two components :
        toolBarTray.Arrange(toolBarTrayRect);
        combobox.Arrange(comboRect);
    }
    
  • 这里有一个指向工作解决方案的链接,您可以检查它是否符合您的要求:


    希望我理解了你的愿望并对你有所帮助,好吧,如果你想让工具栏完全崩溃,我找到的唯一解决办法就是写一点代码。 仅在XAML中使用布局会更加优雅,但有时C#代码是唯一的方法

  • 摆脱网格:

  • 处理画布的大小调整:

    private void ToolbarSizeChanged(object sender, SizeChangedEventArgs e)
    {
        const double COMBO_MIN_DESIRED_WIDTH = 300.0;
        Size newSize = e.NewSize;
    
        Size sizeToolbarTray = new Size(Double.PositiveInfinity, newSize.Height);
        // measure to update DesiredSize
        toolBarTray.Measure(sizeToolbarTray);
    
        Rect toolBarTrayRect = new Rect(0, 0, 0, newSize.Height);
        Rect comboRect =new Rect(0,0,0,newSize.Height);
    
        // 3 cases :
    
        // 1) Much space is available
        if (newSize.Width > toolBarTray.DesiredSize.Width + COMBO_MIN_DESIRED_WIDTH)
        {
            toolBarTrayRect.Width = toolBarTray.DesiredSize.Width;
            comboRect.X = toolBarTrayRect.Width;
            comboRect.Width = newSize.Width -toolBarTrayRect.Width;
    
        }
        // 2) Space to show Combo, but not totally toolbar
        else if (newSize.Width > COMBO_MIN_DESIRED_WIDTH)
        {
            toolBarTrayRect.Width = newSize.Width - COMBO_MIN_DESIRED_WIDTH;
            comboRect.X = toolBarTrayRect.Width;
            comboRect.Width = COMBO_MIN_DESIRED_WIDTH;
        }
        // 3) Not enough space to show toolbar
        else
        {
            toolBarTrayRect.Width = 0;
            comboRect.Width = newSize.Width;
        }
        // Layout the two components :
        toolBarTray.Arrange(toolBarTrayRect);
        combobox.Arrange(comboRect);
    }
    
  • 这里有一个指向工作解决方案的链接,您可以检查它是否符合您的要求:


    希望我理解了您的愿望并对您有所帮助,因为使用
    Width=“Auto
    可以防止工具栏托盘正确折叠。最终我指定了
    Width=“*”MaxWidth=“400”
    Width=“*”MinWidth=“500”“
    用于各个列。这是一个解决办法,我必须找到工具栏托盘的绝对宽度,比如说400,并设置为MaxWidth。这不是最好的方法,因为向工具栏托盘添加新项目意味着再次找到绝对宽度。我希望有一个更好的解决方案。我用我的解决方案尝试了一下你的代码,看起来还不错。我可以调整工具栏的大小,右边没有多余的空间。崩溃的问题到底是什么?这是我的比较解决方案,这是我的示例解决方案。随着窗口宽度的减小,组合框会按下工具栏托盘,折叠按钮。好的,我下载了你的代码,对我来说,没关系,我不会