Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#-如何在同一列和/或行上创建具有独立拆分器的WPF接口?_C#_.net_Wpf_Splitter - Fatal编程技术网

C#-如何在同一列和/或行上创建具有独立拆分器的WPF接口?

C#-如何在同一列和/或行上创建具有独立拆分器的WPF接口?,c#,.net,wpf,splitter,C#,.net,Wpf,Splitter,我对VisualStudio2019 WPF界面完全是新手,但我需要为我的工作创建一个演示项目,以确定我们将来是否会迁移到这样的技术 为了确定这一点,我决定模拟一个现有应用程序的主界面,该应用程序是使用Embarcadero RAD Studio编译器创建的。此应用程序主要分为4个不同的部分,如下所示: 现在我想在每个部分之间添加拆分器,以这样的方式,它们可以调整大小,独立于其他部分。例如,我希望顶部拆分器调整左顶部和右顶部面板的大小,但不调整左底部和右底部面板的大小 为了创建上述接口,我编写

我对VisualStudio2019 WPF界面完全是新手,但我需要为我的工作创建一个演示项目,以确定我们将来是否会迁移到这样的技术

为了确定这一点,我决定模拟一个现有应用程序的主界面,该应用程序是使用Embarcadero RAD Studio编译器创建的。此应用程序主要分为4个不同的部分,如下所示:

现在我想在每个部分之间添加拆分器,以这样的方式,它们可以调整大小,独立于其他部分。例如,我希望顶部拆分器调整左顶部和右顶部面板的大小,但不调整左底部和右底部面板的大小

为了创建上述接口,我编写了以下xaml内容:


左上角
左下角
右上方
右下角
但是,当我移动(例如,顶部拆分器)时,底部拆分器一起移动,底部部分的大小也随之调整。如何修改代码以获得所需的行为?


<Window x:Class="SAMPLE.Panels.GridSplitterSample"
 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"


 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
 Title="GridSplitterSample" Height="300" Width="300">
<Grid>
<Grid.ColumnDefinitions>
    <ColumnDefinition Width="*" />

<ColumnDefinition Width="5" />
   `<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
 <TextBlock FontSize="55" HorizontalAlignment="Center" VerticalAlignment="Center" 
TextWrapping="Wrap">Left side</TextBlock>
 <GridSplitter Grid.Column="1" Width="5" HorizontalAlignment="Stretch" />
<TextBlock Grid.Column="2" FontSize="55" HorizontalAlignment="Center" 
        VerticalAlignment="Center" TextWrapping="Wrap">Right side</TextBlock>


  </Grid>
</Window>
` 左侧 右侧

`
左侧
右侧

您可以通过在网格中放置网格来实现这一点。 因此,第一个网格仅由三行组成。第一个将包含一个网格,其中有三列用于两个TextBlock和一个gridsplitter。第二行是调整两行大小的拆分器。第三行将包含另一个网格,其设置与第一行相同

它看起来是这样的:

<Window x:Class="Splitted.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:local="clr-namespace:SplitterProject"
    mc:Ignorable="d"
    Title="MainWindow" Height="350" Width="525">
<Grid Margin="2">
    <Grid.RowDefinitions>
        <RowDefinition Height="30*"/>
        <RowDefinition Height="*"/>
        <RowDefinition Height="53*"/>
    </Grid.RowDefinitions>
    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="100*"/>
            <ColumnDefinition Width="5"/>
            <ColumnDefinition Width="295*"/>
        </Grid.ColumnDefinitions>
        <TextBlock>Top left</TextBlock>
        <GridSplitter VerticalAlignment="Stretch" Width="5" Grid.Column="1"/>
        <TextBlock Grid.Column="2">Top right</TextBlock>
    </Grid>
    <GridSplitter HorizontalAlignment="Stretch" Height="5" Grid.Row="1"/>
    <Grid Grid.Row="2">
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="100*"/>
            <ColumnDefinition Width="5"/>
            <ColumnDefinition Width="295*"/>
        </Grid.ColumnDefinitions>
        <TextBlock>Bottom left</TextBlock>
        <GridSplitter VerticalAlignment="Stretch" Width="5" Grid.Column="1"/>
        <TextBlock Grid.Column="2">Bottom right</TextBlock>
    </Grid>
</Grid>

左上角
右上角
左下角
右下角

然后,可以独立调整顶行和底行的大小:

您可以通过在网格中放置网格来实现这一点。 因此,第一个网格仅由三行组成。第一个将包含一个网格,其中有三列用于两个TextBlock和一个gridsplitter。第二行是调整两行大小的拆分器。第三行将包含另一个网格,其设置与第一行相同

它看起来是这样的:

<Window x:Class="Splitted.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:local="clr-namespace:SplitterProject"
    mc:Ignorable="d"
    Title="MainWindow" Height="350" Width="525">
<Grid Margin="2">
    <Grid.RowDefinitions>
        <RowDefinition Height="30*"/>
        <RowDefinition Height="*"/>
        <RowDefinition Height="53*"/>
    </Grid.RowDefinitions>
    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="100*"/>
            <ColumnDefinition Width="5"/>
            <ColumnDefinition Width="295*"/>
        </Grid.ColumnDefinitions>
        <TextBlock>Top left</TextBlock>
        <GridSplitter VerticalAlignment="Stretch" Width="5" Grid.Column="1"/>
        <TextBlock Grid.Column="2">Top right</TextBlock>
    </Grid>
    <GridSplitter HorizontalAlignment="Stretch" Height="5" Grid.Row="1"/>
    <Grid Grid.Row="2">
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="100*"/>
            <ColumnDefinition Width="5"/>
            <ColumnDefinition Width="295*"/>
        </Grid.ColumnDefinitions>
        <TextBlock>Bottom left</TextBlock>
        <GridSplitter VerticalAlignment="Stretch" Width="5" Grid.Column="1"/>
        <TextBlock Grid.Column="2">Bottom right</TextBlock>
    </Grid>
</Grid>

左上角
右上角
左下角
右下角

然后,可以独立调整顶行和底行的大小:

在主网格内分离网格,顶部和底部是各自的网格,带有垂直拆分器。您尚未指定是否也希望能够独立移动水平拆分器的每一半,以便只调整左上+左下或右上+右下的大小。如果你想做到这一点,我认为不可能用纯XAML——你可能实际上需要创建额外的分离器来表示中间的命令部分,并在魔法后面做一些代码,以确保片段在其他分裂器被移动时被调整大小/隐藏。垂直拆分器。您尚未指定是否还希望能够独立移动水平拆分器的每一半,以便只调整左上+左下或右上+右下的大小。如果你想做到这一点,我不认为这是可能的纯XAML -你可能实际上需要创建额外的分裂器,以代表在中东的命令部分,并做一些魔法背后的代码,以确保片段调整大小/隐藏其他分裂者移动。