2011-11-25 42 views
1

我想提出兩個控件在WPF中網格 - GridView和上述其他ScheduleView一個與GridSplitter這樣的:網格行 - 填補所有可用空間

<Grid> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="Auto" /> 
     <RowDefinition Height="4" /> 
     <RowDefinition Height="Auto"/> 
    </Grid.RowDefinitions> 
    <telerik:RadScheduleView Grid.Row="0" /> 
    <GridSplitter Grid.Row="1" HorizontalAlignment="Stretch" Height="4"/> 
    <telerik:RadGridView Grid.Row="2"/> 
</Grid> 

的問題是,有三種模式: - 僅顯示GridView - 僅顯示ScheduleView - GridView和ScheduleView顯示爲 在每種情況下,我都希望可見控件(s)填充所有可用空間。如果顯示兩者,我希望他們共享它們之間的空間,並且GridSplitter應該能夠調整該空間的大小。

如何在不改變顯示模式的情況下明確設置高度來實現這一點?

回答

0

簡單地給出兩行的高度爲*這意味着它將填充所有可用空間。 然後使用TriggersConverter將兩個列的可見性綁定到GridSplitter,無論您感覺如何。有了觸發器,這將工作 -

<Grid> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="*" /> 
     <RowDefinition Height="4" /> 
     <RowDefinition Height="*"/> 
    </Grid.RowDefinitions> 
    <telerik:RadScheduleView Grid.Row="0" /> 
    <GridSplitter Grid.Row="1" HorizontalAlignment="Stretch"> 
     <GridSplitter.Style> 
      <Style TargetType="GridSplitter"> 
       <Setter Property="Visibility" Value="Visible"/> 
       <Style.Triggers> 
        <DataTrigger Binding="{Binding ElementName=btn1, Path=IsVisible}" Value="False"> 
         <Setter Property="Visibility" Value="Collapsed"/> 
        </DataTrigger> 
        <DataTrigger Binding="{Binding ElementName=btn2, Path=IsVisible}" Value="False"> 
         <Setter Property="Visibility" Value="Collapsed"/> 
        </DataTrigger> 
       </Style.Triggers> 
      </Style> 
     </GridSplitter.Style> 
    </GridSplitter> 
    <telerik:RadGridView Grid.Row="2"/> 
</Grid> 

我假設你的GridView的可見性已經到位(如何發揮與可見性的邏輯)。確保將可見性設置爲Collapsed而不是Hidden用於GridViews。

+0

我將它們設置爲摺疊狀態並且網格行未調整大小。我將嘗試將VerticalAlignment設置爲Stretch。 – kubal5003

+0

這不幸的是不起作用。我正在嘗試使用DataTriggers來設置網格行的高度,但目前爲止沒有效果。 – kubal5003

1

我建議做一些像一個MathConverter基於某種觸發

例如,要明確設置你的網格的高度,如果兩個網格是可見的,設置其高度爲((GridHeight - 4)/2),如果只有一個網格是可見的,而然後將其設置爲Grid的全高,因爲GridSplitter和其他Grid都不可見。

下面是一個例子。我忽略了可見性觸發器,因爲我假設你已經知道如何實現它們。

<Grid x:Name="ParentGrid"> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="Auto" /> 
     <RowDefinition Height="Auto" /> 
     <RowDefinition Height="Auto"/> 
    </Grid.RowDefinitions> 
    <telerik:RadScheduleView x:Name="MyGridView" Grid.Row="0"> 
     <telerik:RadScheduleView.Style> 
      <Style TargetType="telerik:RadScheduleView"> 
       <Setter Property="Height" 
         Value="{Binding ElementName=ParentGrid, 
             Path=ActualHeight, 
             Converter={StaticResource MathConverter}, 
             ConverterParameter=((@VALUE-4)/2)}"/> 
       <Style.Triggers> 
        <DataTrigger Binding="{Binding ElementName=MyScheduleView, Path=IsVisible}" Value="False"> 
         <Setter Property="Height" Value="{Binding ElementName=ParentGrid, Path=ActualHeight}"/> 
        </DataTrigger> 
       </Style.Triggers> 
      </Style> 
     </telerik:RadScheduleView.Style> 
    </telerik:RadScheduleView> 

    <GridSplitter Grid.Row="1" HorizontalAlignment="Stretch" Height="4"/> 

    <telerik:RadGridView x:Name="MyScheduleView" Grid.Row="2" 
     <telerik:RadScheduleView.Style> 
      <Style TargetType="telerik:RadScheduleView"> 
       <Setter Property="Height" 
         Value="{Binding ElementName=ParentGrid, 
             Path=ActualHeight, 
             Converter={StaticResource MathConverter}, 
             ConverterParameter=((@VALUE-4)/2)}" /> 
       <Style.Triggers> 
        <DataTrigger Binding="{Binding ElementName=MyGridView, Path=IsVisible}" Value="False"> 
         <Setter Property="Height" Value="{Binding ElementName=ParentGrid, Path=ActualHeight}"/> 
        </DataTrigger> 
       </Style.Triggers> 
      </Style> 
     </telerik:RadScheduleView.Style> 
    </telerik:RadScheduleView> 
</Grid> 
相關問題