代码之家  ›  专栏  ›  技术社区  ›  Gabe

网格拆分器和最小宽度

  •  2
  • Gabe  · 技术社区  · 15 年前

    MinWidth 我的专栏。

    适用于 Column 列 2。拆分器一直在拖动,我可以使列小于声明的 这个 最小宽度 Column Width 有一个数值而不是自动。。。。有办法让它工作吗 Auto 或者只是 * ??

    有什么想法吗?

        <!-- Content Area -->
        <Grid x:Name="ContentGrid"
              Grid.Row="2">
            <Grid.ColumnDefinitions>
                <ColumnDefinition MinWidth="32" Width="260"/>
                <ColumnDefinition Width="8" />
                <ColumnDefinition MinWidth="100" Width="*" />
            </Grid.ColumnDefinitions>
    
            <!-- Navigation  -->
            <ItemsControl Name="NavigationRegion" 
                      Regions:RegionManager.RegionName="NavigationRegion"
                      Grid.Column="0">
                <ItemsControl.ItemsPanel>
                    <ItemsPanelTemplate>
                        <Grid/>
                    </ItemsPanelTemplate>
                </ItemsControl.ItemsPanel>
            </ItemsControl>
            <!-- Splitter -->
            <controls:GridSplitter x:Name="GridSplitter" 
                                   Grid.Column="1" 
                                   VerticalAlignment="Stretch" 
                                   HorizontalAlignment="Center" 
                                   Background="{StaticResource SplitterBackgroundColor}" 
                                   Width="8" 
                                   UseLayoutRounding="True" 
                                   BorderThickness="1"     
                                   BorderBrush="Black"  
                                   Height="Auto"/>
            <!-- Form -->
            <ItemsControl x:Name="MainRegion"
                          Grid.Column="2" 
                          Regions:RegionManager.RegionName="MainRegion">
                <ItemsControl.ItemsPanel>
                    <ItemsPanelTemplate>
                        <Grid/>
                    </ItemsPanelTemplate>
                </ItemsControl.ItemsPanel>
            </ItemsControl>
    
    
        </Grid>
    
    2 回复  |  直到 15 年前
        1
  •  4
  •   Gabe    15 年前

    我解决这个问题的方法是 MaxWidth 对于 Column 0个。 SizeChanged 火我得到了 最大宽度 价值 列 ActualWidth

    所以我把我的 MinWidth 列 还有2个。以下是修改:

    <!-- Content Area -->
    <Grid x:Name="ContentGrid"
          Grid.Row="2">
        <Grid.ColumnDefinitions>
            <ColumnDefinition MinWidth="32" Width="260"/>
            <ColumnDefinition Width="8" />
            <ColumnDefinition Width="*" />
        </Grid.ColumnDefinitions>
    
    ...
    

    最大宽度

    this.SizeChanged += (s, e) =>
    {
        double maxWidth = this.ActualWidth / 2.0;
        this.ContentGrid.ColumnDefinitions[0].MaxWidth = maxWidth;
    }
    
        2
  •  0
  •   Martin    12 年前

    有笑脸的情况,例如。

    <Grid.ColumnDefinitions>
      <ColumnDefinitions Width="Auto"/>
      <ColumnDefinitions Width="12"/>
      <ColumnDefinitions Width="*"/>
    </Grid.ColumnDefinitions>
    

    <GridSplitter Grid.Column="1" VerticalAlignment="Stretch"/>
    

    我的目标:

    第一列中的自动宽度阻止拆分器“主动变更”拆分器。因此,我想设置拆分器的限制,以防止它将第三列(加权宽度-*)推过边界。

    使用IValueConverter返回主窗口的一半宽度作为边界,

    return (double)value/2;
    

    尝试过(不起作用),

    <SomeContent Grid.Column="2"
        MinWidth="{Binding
                   RelativeSource={RelativeSource AncestorType=Window},
                   Path=ActualWidth,
                   Converter={StaticResource minWidthConverter}}"/>  
    

    也试过了(也没用),

    <AnotherContent Grid.Column="0"
        MaxWidth="{Binding
                   RelativeSource={RelativeSource AncestorType=Window},
                   Path=ActualWidth,
                   Converter={StaticResource minWidthConverter}}"/>  
    

    最后 (& ),

    <GridSplitter Grid.Column="1" VerticalAlignment="Stretch"
        MaxWidth="{Binding
                   RelativeSource={RelativeSource AncestorType=Window},
                   Path=ActualWidth,
                   Converter={StaticResource minWidthConverter}}"/>