none
用鼠标对Grid内的控件进行大小拖动调整,怎么实现? RRS feed

  • 问题

  • 在一个Grid面板中,对Gird里的GroupBox控件,当鼠标移动到GroupBox控件边框上时,一直按住,并通过光标拖动调整GroupBox控件显示的大小。就像用鼠标对windows窗体那样调整窗体大小。

    鼠标对Grid内的控件拖动修改显示大小,一种方式是修改鼠标编辑控件的margin,达到鼠标对控件显示位置和大小进行拖动修改的效果。

    基于Margin修改,达到拖动并修改控件大小,这个要怎么做?鼠标移动到grid内的控件边框上,怎么触发那个双向箭头的光标,并向双向箭头的方向拖动改变大小?




    • 已编辑 Trian555 2022年9月28日 8:46
    2022年9月28日 6:56

答案

  • 你可以尝试参考下面的代码。

    xaml code:

     <Grid>
            <Border x:Name="Content"  Width="500" Height="500" 
                     MinWidth="100" MinHeight="100" CornerRadius="2"   Background="AliceBlue">
                <Border.Effect>
                    <DropShadowEffect ShadowDepth="0" BlurRadius="10"/>
                </Border.Effect>
                <Grid>
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="4" />
                        <ColumnDefinition Width="*" />
                        <ColumnDefinition Width="4" />
                    </Grid.ColumnDefinitions>
                    <Grid.RowDefinitions>
                        <RowDefinition Height="4" />
                        <RowDefinition Height="Auto" />
                        <RowDefinition Height="*" />
                        <RowDefinition Height="4" />
                    </Grid.RowDefinitions>
                    <Thumb x:Name="topSizeGrip" Opacity="0" Grid.Row="0" Grid.Column="1" Cursor="SizeNS"  DragDelta="Thumb_DragDelta"/>
                    <Thumb x:Name="bottomSizeGrip" Opacity="0" Grid.Row="3" Grid.Column="1" Cursor="SizeNS"  DragDelta="Thumb_DragDelta"/>
                    <Thumb x:Name="leftSizeGrip" Opacity="0" Grid.Row="1" Grid.Column="0" Grid.RowSpan="2" Cursor="SizeWE" DragDelta="Thumb_DragDelta"/>
                    <Thumb x:Name="rightSizeGrip" Opacity="0" Grid.Row="1" Grid.Column="2" Grid.RowSpan="2" Cursor="SizeWE" DragDelta="Thumb_DragDelta"/>
                    <Thumb x:Name="bottomRightSizeGrip" Opacity="0" Grid.Row="3" Grid.Column="2" Cursor="SizeNWSE" Tag="BR" DragDelta="Thumb_DragDelta"/>
                    <Border Grid.Row="2" Grid.Column="1" CornerRadius="3" BorderThickness="1" BorderBrush="LightSeaGreen" Background="LightGoldenrodYellow">
                        <GroupBox>
                            <TextBlock Text="my window" FontSize="20" HorizontalAlignment="Center" VerticalAlignment="Center"/>
                        </GroupBox>
                        
                    </Border>
                </Grid>
            </Border>
        </Grid>

    xaml.cs:

     private void Thumb_DragDelta(object sender, DragDeltaEventArgs e)
            {
                var str = (string)((Thumb)sender).Name.ToLower();
    
                if (str.Contains("top"))
                {
                    Content.Height = Math.Min(Math.Max(Content.MinHeight, Content.ActualHeight - e.VerticalChange), Content.MaxHeight);
                    Canvas.SetTop(Content, Canvas.GetTop(Content) - Content.Height + Content.ActualHeight);
                }
                if (str.Contains("left"))
                {
                    Content.Width = Math.Min(Math.Max(Content.MinWidth, Content.ActualWidth - e.HorizontalChange), Content.MaxWidth);
                    Canvas.SetLeft(Content, Canvas.GetLeft(Content) - Content.Width + Content.ActualWidth);
                }
                if (str.Contains("bottom"))
                {
                    Content.Height = Math.Min(Math.Max(Content.MinHeight, Content.ActualHeight + e.VerticalChange), Content.MaxHeight);
                }
                if (str.Contains("right"))
                {
                    Content.Width = Math.Min(Math.Max(Content.MinWidth, Content.ActualWidth + e.HorizontalChange), Content.MaxWidth);
                }
                e.Handled = true;
            }


    MSDN Community Support
    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.

    • 已标记为答案 Trian555 2022年10月14日 1:55
    2022年9月29日 9:53