在 WPF 中使用复杂的网格拆分器
using complex grid spliter on WPF
我不知道如何使用网格分割器。
我让用户启用调整窗口内布局的大小。
例如 XAML
我希望用户调整名为 gridDetails
的 Warp Panel 的大小
感谢您的回答
正在添加 XAML:
<Window
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:WpfApplication1" x:Name="Main" x:Class="WpfApplication1.MainWindow"
Title="P analyzer" Height="616.15" Width="1033" WindowState="Maximized" Closing="Main_Closing">
<Window.DataContext>
<local:DataGridViewModel/>
</Window.DataContext>
<Window.Resources>
<Style x:Key="ListViewItemStyle" TargetType="ListViewItem">
<Setter Property="Margin" Value="3"/>
<Setter Property="Background" Value="Transparent"/>
<Setter Property="BorderThickness" Value="1"/>
<Setter Property="BorderBrush" Value="Transparent"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="ListViewItem">
<Border
Background="{TemplateBinding Background}"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}"
Padding="{TemplateBinding Padding}">
<ContentPresenter/>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
<Style.Triggers>
<Trigger Property="IsSelected" Value="True">
<Setter Property="BorderBrush" Value="Red"/>
<Setter Property="BorderThickness" Value="2"/>
</Trigger>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Background" Value="LightBlue"/>
</Trigger>
</Style.Triggers>
</Style>
<local:BackGroundConverter x:Key="converter"></local:BackGroundConverter>
</Window.Resources>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="1*"/>
<!--start-->
<ColumnDefinition Width="1*"/>
<ColumnDefinition Width="1*"/>
<!--space for putting progress bar in the middle-->
<ColumnDefinition Width="1"/>
<!--the end of the data grid data-->
<ColumnDefinition Width="0.05*"/>
<!--space betweeen datagrid data and filter-->
<ColumnDefinition Width="3*"/>
<!--filter-->
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="21*"/>
<!--Menu Bar-->
<RowDefinition Height="4*"/>
<!--Space-->
<RowDefinition Height="21*"/>
<!--progress Bar-->
<RowDefinition Height="4*"/>
<!--space-->
<RowDefinition Height="413*"/>
<!-- grid contain progress bar and datagrid data-->
<RowDefinition Height="60*"/>
<!-- Space-->
<RowDefinition Height="63*"/>
<!--grid which contain all of the translated fileds-->
</Grid.RowDefinitions>
<Menu Grid.Column="0" Grid.ColumnSpan="6" Grid.Row="0">
<MenuItem Header="File" >
<MenuItem Header="Load" Click="btnBrowse_Click"></MenuItem>
</MenuItem>
<MenuItem Header="About" ></MenuItem>
</Menu>
<ProgressBar x:Name="progressBarFile" Grid.Row="2" Grid.Column="1" />
<CheckBox x:Name="CB2Lines" Grid.Row="2" Grid.Column="0" HorizontalAlignment="Center" VerticalAlignment="Center" Content="2 Lines" Checked="CB2Lines_Checked" Unchecked="CB2Lines_Unchecked" ></CheckBox>
<Grid Grid.Row="4" Grid.Column="0" Grid.ColumnSpan="3">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="85*"/>
<ColumnDefinition Width="423*"/>
</Grid.ColumnDefinitions>
<Grid Grid.Column="0" Grid.ColumnSpan="5" Background="Aqua" >
<ListView x:Name="LV" ItemsSource= "{Binding Lggv}" SelectionChanged="dataGridData_SelectionChanged" ItemContainerStyle="{StaticResource ListViewItemStyle}" >
<ListView.ItemTemplate>
<DataTemplate>
<StackPanel >
<Border BorderThickness="1" BorderBrush="Black">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="150"></ColumnDefinition>
<ColumnDefinition Width="55"></ColumnDefinition>
<ColumnDefinition Width="1*"></ColumnDefinition>
</Grid.ColumnDefinitions>
<TextBlock x:Name="tbHeader" Text="{Binding Info }" AllowDrop="True" FontWeight="Bold" Grid.Column="2" Visibility="{Binding Visibility_Header}" >
<TextBlock.Style>
<Style TargetType="TextBlock">
<Setter Property="Background">
<Setter.Value>
<!-- this is the default background-->
<LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
<GradientStop Color="#FFCEE6C6" Offset="0.008"/>
<GradientStop Color="#FF9ECF8C" Offset="0.987"/>
</LinearGradientBrush>
</Setter.Value>
</Setter>
</Style>
</TextBlock.Style>
</TextBlock>
</Grid>
</Border>
<Grid x:Name="GridData">
<Grid.Background>
<MultiBinding Converter="{StaticResource converter }">
<Binding Path="Type"></Binding>
<Binding Path="NodeID"></Binding>
<Binding Path="TLV"></Binding>
</MultiBinding>
</Grid.Background>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="150"></ColumnDefinition>
<ColumnDefinition Width="55"></ColumnDefinition>
<ColumnDefinition Width="1*"></ColumnDefinition>
</Grid.ColumnDefinitions>
<Border Grid.Column="0" BorderThickness="1" BorderBrush="Black">
<TextBlock Text="{Binding DateTime}" ></TextBlock>
</Border>
<Border Grid.Column="1" BorderThickness="1" BorderBrush="Black">
<TextBlock Text="{Binding ComPort}"></TextBlock>
</Border>
<Border Grid.Column="2" BorderThickness="1" BorderBrush="Black">
<TextBlock Text="{Binding Data}" ></TextBlock>
</Border>
</Grid>
</StackPanel>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</Grid>
</Grid>
<Grid Grid.Column="5" Grid.Row="4" >
<Grid.ColumnDefinitions>
<ColumnDefinition Width="1*"/>
<ColumnDefinition Width="1*"/>
<ColumnDefinition Width="1*"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="1*"/>
<RowDefinition Height="1*"/>
</Grid.RowDefinitions>
<local:ItemFilter x:Name="TypeFilter" Grid.Column="0" Grid.Row="0" ></local:ItemFilter>
<local:ItemFilter x:Name="NodeIDFilter" Grid.Column="1" Grid.Row="0" ></local:ItemFilter>
<local:ItemFilter x:Name="TLVFilter" Grid.Column="2" Grid.Row="0"></local:ItemFilter>
<!--contain filter pet type-->
</Grid>
<ScrollViewer Grid.Column="0" Grid.Row="5" Grid.RowSpan="2" Grid.ColumnSpan="6">
<WrapPanel x:Name="gridDetails" UseLayoutRounding="True" >
</WrapPanel>
</ScrollViewer>
</Grid>
请不要只转储数百行代码,其中大部分是无关紧要的。我不打例子的话,至少把无关紧要的部分删掉吧
您需要添加一个网格行来容纳网格拆分器:
...
<Grid.RowDefinitions>
...
<!-- grid contain progress bar and datagrid data-->
<RowDefinition Height="60*"/>
<!-- A grid space for the gridsplitter-->
<RowDefinition Height="5"/>
<!-- Space-->
<RowDefinition Height="63*"/>
<!--grid which contain all of the translated fileds-->
</Grid.RowDefinitions>
...
然后在上述行中添加一个网格分切器:
...
<GridSplitter Grid.Row="5" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"/>
<ScrollViewer Grid.Column="0" Grid.Row="6" Grid.RowSpan="2" Grid.ColumnSpan="6">
<WrapPanel x:Name="gridDetails" UseLayoutRounding="True" >
</WrapPanel>
</ScrollViewer>
我不知道如何使用网格分割器。
我让用户启用调整窗口内布局的大小。 例如 XAML 我希望用户调整名为 gridDetails
的 Warp Panel 的大小感谢您的回答
正在添加 XAML:
<Window
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:WpfApplication1" x:Name="Main" x:Class="WpfApplication1.MainWindow"
Title="P analyzer" Height="616.15" Width="1033" WindowState="Maximized" Closing="Main_Closing">
<Window.DataContext>
<local:DataGridViewModel/>
</Window.DataContext>
<Window.Resources>
<Style x:Key="ListViewItemStyle" TargetType="ListViewItem">
<Setter Property="Margin" Value="3"/>
<Setter Property="Background" Value="Transparent"/>
<Setter Property="BorderThickness" Value="1"/>
<Setter Property="BorderBrush" Value="Transparent"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="ListViewItem">
<Border
Background="{TemplateBinding Background}"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}"
Padding="{TemplateBinding Padding}">
<ContentPresenter/>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
<Style.Triggers>
<Trigger Property="IsSelected" Value="True">
<Setter Property="BorderBrush" Value="Red"/>
<Setter Property="BorderThickness" Value="2"/>
</Trigger>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Background" Value="LightBlue"/>
</Trigger>
</Style.Triggers>
</Style>
<local:BackGroundConverter x:Key="converter"></local:BackGroundConverter>
</Window.Resources>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="1*"/>
<!--start-->
<ColumnDefinition Width="1*"/>
<ColumnDefinition Width="1*"/>
<!--space for putting progress bar in the middle-->
<ColumnDefinition Width="1"/>
<!--the end of the data grid data-->
<ColumnDefinition Width="0.05*"/>
<!--space betweeen datagrid data and filter-->
<ColumnDefinition Width="3*"/>
<!--filter-->
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="21*"/>
<!--Menu Bar-->
<RowDefinition Height="4*"/>
<!--Space-->
<RowDefinition Height="21*"/>
<!--progress Bar-->
<RowDefinition Height="4*"/>
<!--space-->
<RowDefinition Height="413*"/>
<!-- grid contain progress bar and datagrid data-->
<RowDefinition Height="60*"/>
<!-- Space-->
<RowDefinition Height="63*"/>
<!--grid which contain all of the translated fileds-->
</Grid.RowDefinitions>
<Menu Grid.Column="0" Grid.ColumnSpan="6" Grid.Row="0">
<MenuItem Header="File" >
<MenuItem Header="Load" Click="btnBrowse_Click"></MenuItem>
</MenuItem>
<MenuItem Header="About" ></MenuItem>
</Menu>
<ProgressBar x:Name="progressBarFile" Grid.Row="2" Grid.Column="1" />
<CheckBox x:Name="CB2Lines" Grid.Row="2" Grid.Column="0" HorizontalAlignment="Center" VerticalAlignment="Center" Content="2 Lines" Checked="CB2Lines_Checked" Unchecked="CB2Lines_Unchecked" ></CheckBox>
<Grid Grid.Row="4" Grid.Column="0" Grid.ColumnSpan="3">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="85*"/>
<ColumnDefinition Width="423*"/>
</Grid.ColumnDefinitions>
<Grid Grid.Column="0" Grid.ColumnSpan="5" Background="Aqua" >
<ListView x:Name="LV" ItemsSource= "{Binding Lggv}" SelectionChanged="dataGridData_SelectionChanged" ItemContainerStyle="{StaticResource ListViewItemStyle}" >
<ListView.ItemTemplate>
<DataTemplate>
<StackPanel >
<Border BorderThickness="1" BorderBrush="Black">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="150"></ColumnDefinition>
<ColumnDefinition Width="55"></ColumnDefinition>
<ColumnDefinition Width="1*"></ColumnDefinition>
</Grid.ColumnDefinitions>
<TextBlock x:Name="tbHeader" Text="{Binding Info }" AllowDrop="True" FontWeight="Bold" Grid.Column="2" Visibility="{Binding Visibility_Header}" >
<TextBlock.Style>
<Style TargetType="TextBlock">
<Setter Property="Background">
<Setter.Value>
<!-- this is the default background-->
<LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
<GradientStop Color="#FFCEE6C6" Offset="0.008"/>
<GradientStop Color="#FF9ECF8C" Offset="0.987"/>
</LinearGradientBrush>
</Setter.Value>
</Setter>
</Style>
</TextBlock.Style>
</TextBlock>
</Grid>
</Border>
<Grid x:Name="GridData">
<Grid.Background>
<MultiBinding Converter="{StaticResource converter }">
<Binding Path="Type"></Binding>
<Binding Path="NodeID"></Binding>
<Binding Path="TLV"></Binding>
</MultiBinding>
</Grid.Background>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="150"></ColumnDefinition>
<ColumnDefinition Width="55"></ColumnDefinition>
<ColumnDefinition Width="1*"></ColumnDefinition>
</Grid.ColumnDefinitions>
<Border Grid.Column="0" BorderThickness="1" BorderBrush="Black">
<TextBlock Text="{Binding DateTime}" ></TextBlock>
</Border>
<Border Grid.Column="1" BorderThickness="1" BorderBrush="Black">
<TextBlock Text="{Binding ComPort}"></TextBlock>
</Border>
<Border Grid.Column="2" BorderThickness="1" BorderBrush="Black">
<TextBlock Text="{Binding Data}" ></TextBlock>
</Border>
</Grid>
</StackPanel>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</Grid>
</Grid>
<Grid Grid.Column="5" Grid.Row="4" >
<Grid.ColumnDefinitions>
<ColumnDefinition Width="1*"/>
<ColumnDefinition Width="1*"/>
<ColumnDefinition Width="1*"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="1*"/>
<RowDefinition Height="1*"/>
</Grid.RowDefinitions>
<local:ItemFilter x:Name="TypeFilter" Grid.Column="0" Grid.Row="0" ></local:ItemFilter>
<local:ItemFilter x:Name="NodeIDFilter" Grid.Column="1" Grid.Row="0" ></local:ItemFilter>
<local:ItemFilter x:Name="TLVFilter" Grid.Column="2" Grid.Row="0"></local:ItemFilter>
<!--contain filter pet type-->
</Grid>
<ScrollViewer Grid.Column="0" Grid.Row="5" Grid.RowSpan="2" Grid.ColumnSpan="6">
<WrapPanel x:Name="gridDetails" UseLayoutRounding="True" >
</WrapPanel>
</ScrollViewer>
</Grid>
请不要只转储数百行代码,其中大部分是无关紧要的。我不打例子的话,至少把无关紧要的部分删掉吧
您需要添加一个网格行来容纳网格拆分器:
...
<Grid.RowDefinitions>
...
<!-- grid contain progress bar and datagrid data-->
<RowDefinition Height="60*"/>
<!-- A grid space for the gridsplitter-->
<RowDefinition Height="5"/>
<!-- Space-->
<RowDefinition Height="63*"/>
<!--grid which contain all of the translated fileds-->
</Grid.RowDefinitions>
...
然后在上述行中添加一个网格分切器:
...
<GridSplitter Grid.Row="5" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"/>
<ScrollViewer Grid.Column="0" Grid.Row="6" Grid.RowSpan="2" Grid.ColumnSpan="6">
<WrapPanel x:Name="gridDetails" UseLayoutRounding="True" >
</WrapPanel>
</ScrollViewer>