Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.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
材料设计PopUpBox拖放Wpf_Wpf_Drag And Drop_Material Design - Fatal编程技术网

材料设计PopUpBox拖放Wpf

材料设计PopUpBox拖放Wpf,wpf,drag-and-drop,material-design,Wpf,Drag And Drop,Material Design,我想在项目中使用便携材料设计按钮。下面的拖放代码可以工作,但有两个问题。应用拖放功能时,PosButtonClick事件不起作用。第二个问题在拖离页面时消失。如何将弹出按钮保留在页面内 xaml代码 <Grid AllowDrop="True"> <Grid Name="MainGrid" Margin="148,0,561,0" VerticalAlignment="Top" Heigh

我想在项目中使用便携材料设计按钮。下面的拖放代码可以工作,但有两个问题。应用拖放功能时,PosButtonClick事件不起作用。第二个问题在拖离页面时消失。如何将弹出按钮保留在页面内

xaml代码

<Grid AllowDrop="True">

    <Grid Name="MainGrid" Margin="148,0,561,0" VerticalAlignment="Top" Height="162">
        <materialDesign:PopupBox MouseUp="PortableButton_MouseUp" MouseLeftButtonUp="PortableButton_MouseLeftButtonUp" MouseMove="PortableButton_MouseMove" Name="button1" Style="{StaticResource MaterialDesignMultiFloatingActionPopupBox}" 
                                         PlacementMode="BottomAndAlignCentres" ToolTipService.Placement="Right" 
                                         ToolTip="PopupBox, Style MaterialDesignMultiFloatingActionPopupBox">
            <StackPanel>
                <Button Name="SystemButton" ToolTip="System">
                </Button>
                <Button Name="TestButton" ToolTip="Test">
                </Button>
                <Button Name="PosButton" ToolTip="Pos" Click="PosButton_Click">

                </Button>
            </StackPanel>
        </materialDesign:PopupBox>
    </Grid>

</Grid>
鼠标移动代码

if (e.LeftButton == MouseButtonState.Pressed)
        {
            // Capture the mouse for border
            e.MouseDevice.Capture(button1);
            System.Windows.Thickness _margin = new System.Windows.Thickness();
            int _tempX = Convert.ToInt32(e.GetPosition(this).X);
            int _tempY = Convert.ToInt32(e.GetPosition(this).Y);
            _margin = MainGrid.Margin;
            // when While moving _tempX get greater than m_MouseX relative to usercontrol 
            if (m_MouseX > _tempX)
            {
                // add the difference of both to Left
                _margin.Left += (_tempX - m_MouseX);
                // subtract the difference of both to Left
                _margin.Right -= (_tempX - m_MouseX);
            }
            else
            {
                _margin.Left -= (m_MouseX - _tempX);
                _margin.Right -= (_tempX - m_MouseX);
            }
            if (m_MouseY > _tempY)
            {
                _margin.Top += (_tempY - m_MouseY);
                _margin.Bottom -= (_tempY - m_MouseY);
            }
            else
            {
                _margin.Top -= (m_MouseY - _tempY);
                _margin.Bottom -= (_tempY - m_MouseY);
            }
            MainGrid.Margin = _margin;
            m_MouseX = _tempX;
            m_MouseY = _tempY;
        }
MouseLeftButtonUp代码

m_MouseX = e.GetPosition(this).X;
m_MouseY = e.GetPosition(this).Y;
修正了弹出框不会弹出窗外的问题。我已经根据最外层网格的宽度和高度提供了一个控件。唯一的问题是,打开按钮的单击事件不起作用

var ActuelHeight = OutGrid.ActualHeight;
var ActuelWidth = OutGrid.ActualWidth;

if (_tempX < ActuelWidth && _tempX > 0 && _tempY < ActuelHeight && _tempY > 0)
        {
            //MouseMove Code ...
        }
var ActuelHeight=OutGrid.ActualHeight;
var ActuelWidth=OutGrid.ActualWidth;
如果(_tempX0&&u tempY0)
{
//鼠标移动代码。。。
}
我解决了这个问题

对于click事件不起作用的问题,我使用PreviewMouseLefButtonDown事件代替click事件,问题得到了解决

我为窗口溢出问题添加了一个控件,这样它就不会超出窗口大小。我已经根据最外层网格的宽度和高度提供了一个控件

var ActuelHeight = OutGrid.ActualHeight;
        var ActuelWidth = OutGrid.ActualWidth;

        if (_tempX < ActuelWidth && _tempX > 0 && _tempY < ActuelHeight && _tempY > 0)
        {
            //MouseMove Code ...
        }
var ActuelHeight=OutGrid.ActualHeight;
var ActuelWidth=OutGrid.ActualWidth;
如果(_tempX0&&u tempY0)
{
//鼠标移动代码。。。
}
var ActuelHeight = OutGrid.ActualHeight;
        var ActuelWidth = OutGrid.ActualWidth;

        if (_tempX < ActuelWidth && _tempX > 0 && _tempY < ActuelHeight && _tempY > 0)
        {
            //MouseMove Code ...
        }