Wpf 网格行-填充所有可用空间
我想在WPF中的Grid-GridView和ScheduleView中放置两个控件,一个在GridSplitter的另一个之上,如下所示:Wpf 网格行-填充所有可用空间,wpf,Wpf,我想在WPF中的Grid-GridView和ScheduleView中放置两个控件,一个在GridSplitter的另一个之上,如下所示: <Grid> <Grid.RowDefinitions> <RowDefinition Height="Auto" /> <RowDefinition Height="4" /> <RowDefinition Height="Auto"/>
<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
在每种情况下,我都希望可见控件填充所有可用空间。如果显示了这两个,我希望它们共享它们之间的空间,GridSplitter应该能够调整该空间的大小
在更改显示模式时,如何在不明确设置高度的情况下完成此操作?只需将两行的高度指定为
*
,这意味着它将填充所有可用空间。
并使用触发器
或转换器
将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的可见性已经存在(如何使用可见性的逻辑)。请确保将GridView的可见性设置为“折叠”,而不是“隐藏”。只需将两行的高度设置为
*
,这意味着它将填充所有可用空间。
并使用触发器
或转换器
将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的可见性已经存在(如何使用可见性的逻辑)。请确保将GridView的可见性设置为“折叠”,而不是“隐藏”。我建议您根据一些触发器执行类似于a的操作,以明确设置网格的高度 例如,如果两个栅格都可见,则将其高度设置为
((GridHeight-4)/2)
,而如果只有一个栅格可见,则将其设置为栅格的全高,因为GridSplitter和其他栅格都不可见
这里有一个例子。我省略了可见性触发器,因为我假设您已经知道如何实现它们
<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>
我建议做一些类似于a的事情,根据一些触发器显式设置网格的高度
例如,如果两个栅格都可见,则将其高度设置为((GridHeight-4)/2)
,而如果只有一个栅格可见,则将其设置为栅格的全高,因为GridSplitter和其他栅格都不可见
这里有一个例子。我省略了可见性触发器,因为我假设您已经知道如何实现它们
<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>
我将它们设置为折叠,网格行不调整大小。我将尝试将垂直对齐设置为“拉伸”。不幸的是,这不起作用。我尝试使用DataTriggers设置网格行的高度,但到目前为止没有效果。我将它们设置为折叠,网格行的大小不会调整。我将尝试将垂直对齐设置为“拉伸”。不幸的是,这不起作用。我尝试使用DataTriggers设置网格行的高度,但到目前为止没有效果。。