Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/321.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.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:使用GridSplitter隐藏网格行_C#_.net_Wpf - Fatal编程技术网

C# WPF:使用GridSplitter隐藏网格行

C# WPF:使用GridSplitter隐藏网格行,c#,.net,wpf,C#,.net,Wpf,调整拆分器大小后,如何隐藏最后两行? 隐藏最后两行时,webBrowser应填充所有区域 <Grid> <Grid.RowDefinitions> <RowDefinition Height="*" /> <RowDefinition Height="5" /> <RowDefinition Height="Auto" /> </Grid.RowDefinitions

调整拆分器大小后,如何隐藏最后两行? 隐藏最后两行时,webBrowser应填充所有区域

<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="*" />
        <RowDefinition Height="5" />
        <RowDefinition Height="Auto" />
    </Grid.RowDefinitions>
    <WebBrowser Name="webBrowser" />
    <GridSplitter Grid.Row="1" ResizeDirection="Rows" 
                  ResizeBehavior="PreviousAndNext" Width="Auto" Height="5" 
                  HorizontalAlignment="Stretch"
                  Visibility="...">
    </GridSplitter>
    <c:MyControl Grid.Row="2" Visibility="..." />
</Grid>

在MyControl.ActualHeight上触发。如果为0,请将“可见性”设置为“折叠”

<DataTrigger Binding="{Binding ElementName=MyControl, Path=ActualHeight}" Value=0>
    <Setter Property="Visibility" Value="Collapsed" />
</DataTrigger>

此问题的快速解决方法:

    public class HideableGridSplitter : GridSplitter
    {
        private GridLength height;

        public HideableGridSplitter()
        {
            this.IsVisibleChanged += HideableGridSplitter_IsVisibleChanged;
        }

        void HideableGridSplitter_IsVisibleChanged(object sender, DependencyPropertyChangedEventArgs e)
        {
            Grid parent = base.Parent as Grid;
            if (parent == null)
                return;
            int rowIndex = Grid.GetRow(this);
            if (rowIndex + 1 >= parent.RowDefinitions.Count)
                return;
            var lastRow = parent.RowDefinitions[rowIndex + 1];

            if (this.Visibility == Visibility.Visible)
                lastRow.Height = height;
            else
            {
                height = lastRow.Height;
                lastRow.Height = new GridLength(0);
            }
        }
    }

问题:隐藏MyControl和GridSplitter后,webBrowser的高度与隐藏前相同。WebBrowser并没有填满整个区域。如何拉伸webBrowser?@Rover-将隐藏切换为折叠,我将更新我的答案。我忘了“隐藏”仍然会占用布局中的空间,而“折叠”则不会。@Rachel,“隐藏”在使用可见性调整大小之前效果很好。但在调整大小和隐藏后,webBrowser的高度并没有改变。它不依赖于MyControl.Visibility(隐藏或折叠)。@Rover您是否将WebBrowser控件中的水平/垂直对齐设置为拉伸?尝试将中间行的高度改为“自动”,而不是“自动”5@Rachel,它也不起作用。我还尝试删除MyControl-效果相同。如果lastRow指定了MinHeight属性,则需要将其添加到最终的If/else块中。