MaterialDesign PopUpBox 拖放 Wpf
MaterialDesign PopUpBox Drag and Drop Wpf
我想在项目中使用便携的MaterialDesign PopUpButton。下面的拖放代码有效,但有两个问题。当我应用拖放功能时,PosButtonClick 事件不起作用。当拖出页面时,第二个问题就消失了。如何将 PopUpButton 保留在页面内?
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>
MouseUp 代码
e.MouseDevice.Capture(null);
鼠标移动代码
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;
修复了 PopupBox 未从 window 中弹出的问题。我根据最外层 Grid 的 Width 和 Height 提供了一个控件。唯一的问题是打开按钮的Click事件不起作用。
var ActuelHeight = OutGrid.ActualHeight;
var ActuelWidth = OutGrid.ActualWidth;
if (_tempX < ActuelWidth && _tempX > 0 && _tempY < ActuelHeight && _tempY > 0)
{
//MouseMove Code ...
}
我解决了问题。
对于点击事件不起作用的问题,我使用了 PreviewMouseLefButtonDown 事件而不是点击事件,问题就解决了。
我为 window 溢出问题添加了一个控件,这样它就不会在 window 尺寸之外工作。我已经根据最外层Grid的Width和Height提供了一个控件。
var ActuelHeight = OutGrid.ActualHeight;
var ActuelWidth = OutGrid.ActualWidth;
if (_tempX < ActuelWidth && _tempX > 0 && _tempY < ActuelHeight && _tempY > 0)
{
//MouseMove Code ...
}
我想在项目中使用便携的MaterialDesign PopUpButton。下面的拖放代码有效,但有两个问题。当我应用拖放功能时,PosButtonClick 事件不起作用。当拖出页面时,第二个问题就消失了。如何将 PopUpButton 保留在页面内?
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>
MouseUp 代码
e.MouseDevice.Capture(null);
鼠标移动代码
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;
修复了 PopupBox 未从 window 中弹出的问题。我根据最外层 Grid 的 Width 和 Height 提供了一个控件。唯一的问题是打开按钮的Click事件不起作用。
var ActuelHeight = OutGrid.ActualHeight;
var ActuelWidth = OutGrid.ActualWidth;
if (_tempX < ActuelWidth && _tempX > 0 && _tempY < ActuelHeight && _tempY > 0)
{
//MouseMove Code ...
}
我解决了问题。
对于点击事件不起作用的问题,我使用了 PreviewMouseLefButtonDown 事件而不是点击事件,问题就解决了。
我为 window 溢出问题添加了一个控件,这样它就不会在 window 尺寸之外工作。我已经根据最外层Grid的Width和Height提供了一个控件。
var ActuelHeight = OutGrid.ActualHeight;
var ActuelWidth = OutGrid.ActualWidth;
if (_tempX < ActuelWidth && _tempX > 0 && _tempY < ActuelHeight && _tempY > 0)
{
//MouseMove Code ...
}