2010-11-08 70 views
2

我想爲我的列設置一個MinWidthGrid Splitter和MinWidth

MinWidth可以正確處理Column 0但不Column 2.分路器只是不斷拖延,我可以得到列小於申報MinWidthMinWidth似乎才生效,如果Column Width有一個數值,而不是Auto ...有沒有辦法讓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> 
+0

,另一個+1在電網分離器突出的一大敗筆。好的問題 – 2010-11-09 09:20:04

回答

4

我固定的,這是設置爲當 火災SizeChanged我得到基於當前ActualWidth

爲值所以我從Column 2打消了我的MinWidth方式以及。這裏的修改:

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

... 

則事件設置MaxWidth

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

對於創意解決方案+1。我遇到了這個問題,而只使用了固定寬度的列,但當然你需要設置右列的大小(就像你在做的那樣)。乾杯 – 2010-11-09 09:18:54

0

有一個smiliar情況如

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

隨着中間分流,

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

我的目標:

AutoWidth第1列從防止 '非法侵入' 分流到它。因此,我想對分離器設置限制,以防止它將第三列(加權寬度 - *)推到邊界上。

使用的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}}"/> 

誰知設置分流本身= d