C# 防止Chrome标签被拖出窗口屏幕
我目前正在开发一个使用tab的程序,就像Google Chrome tab一样, 标签工作正常,没问题。 但我进入了一个条件,我甚至可以将标签拖出显示器屏幕(左边缘和右边缘) 问题是,如何限制标签拖到屏幕边缘?? 因此选项卡将不会通过屏幕。基本上,这只是关于审美目的。。 请注意,我已经在谷歌和这个网站上做了研究,但仍然不知道怎么做 这是一段代码C# 防止Chrome标签被拖出窗口屏幕,c#,windows,google-chrome,tabs,C#,Windows,Google Chrome,Tabs,我目前正在开发一个使用tab的程序,就像Google Chrome tab一样, 标签工作正常,没问题。 但我进入了一个条件,我甚至可以将标签拖出显示器屏幕(左边缘和右边缘) 问题是,如何限制标签拖到屏幕边缘?? 因此选项卡将不会通过屏幕。基本上,这只是关于审美目的。。 请注意,我已经在谷歌和这个网站上做了研究,但仍然不知道怎么做 这是一段代码 private bool draggingWindow; private Size finalSize; private dou
private bool draggingWindow;
private Size finalSize;
private double overlap;
private double leftMargin;
private double rightMargin;
private double maxTabWidth;
private double minTabWidth;
private double defaultMeasureHeight;
private double currentTabWidth;
private int captureGuard;
private int originalIndex;
private int slideIndex;
private List<double> slideIntervals;
private ChromeTabItem draggedTab;
private Point downPoint;
private ChromeTabControl parent;
public Rect addButtonRect;
private Size addButtonSize;
public Button addButton;
private bool modifyLeftOffset, modifyTopOffset;
private Point origCursorLocation;
private double origHorizOffset, origVertOffset;
protected override void OnPreviewMouseMove(MouseEventArgs e)
{
try
{
base.OnPreviewMouseMove(e);
if (this.addButtonRect.Contains(e.GetPosition(this)) && this.addButton.Background != Brushes.White && this.addButton.Background != Brushes.DarkGray)
{
this.addButton.Background = Brushes.White;
this.InvalidateVisual();
}
else if (!this.addButtonRect.Contains(e.GetPosition(this)) && this.addButton.Background != null)
{
this.addButton.Background = null;
this.InvalidateVisual();
}
if (this.draggedTab == null || this.draggingWindow) { return; }
Point nowPoint = e.GetPosition(this);
this.addButton.Visibility = Visibility.Hidden;
double newHorizontalOffset;
if (this.modifyLeftOffset)
newHorizontalOffset = this.origHorizOffset + (nowPoint.X - this.origCursorLocation.X);
else
newHorizontalOffset = this.origHorizOffset - (nowPoint.X - this.origCursorLocation.X);
Thickness margin = new Thickness(nowPoint.X - this.downPoint.X, 0, this.downPoint.X - nowPoint.X, 0);
this.draggedTab.Margin = margin;
Rect elemRect = this.CalculateDragElementRect(newHorizontalOffset, 1);
bool leftAlign = elemRect.Left < 0;
bool rightAlign = elemRect.Right > this.ActualWidth;
if (leftAlign)
newHorizontalOffset = modifyLeftOffset ? 0 : this.ActualWidth - elemRect.Width;
else if (rightAlign)
newHorizontalOffset = modifyLeftOffset ? this.ActualWidth - elemRect.Width : 0;
if (this.modifyLeftOffset)
Canvas.SetLeft(this.draggedTab, newHorizontalOffset);
else
Canvas.SetRight(this.draggedTab, newHorizontalOffset);
base.OnPreviewMouseMove( e );
if (margin.Left != 0)
{
int guardValue = Interlocked.Increment(ref this.captureGuard);
if (guardValue == 1)
{
this.originalIndex = this.draggedTab.Index;
this.slideIndex = this.originalIndex + 1;
this.slideIntervals = new List<double>();
this.slideIntervals.Add(double.NegativeInfinity);
for (int i = 1; i <= this.Children.Count; i += 1)
{
var diff = i - this.slideIndex;
var sign = diff == 0 ? 0 : diff / Math.Abs(diff);
var bound = Math.Min(1, Math.Abs(diff)) * ((sign * this.currentTabWidth / 3) + ((Math.Abs(diff) < 2) ? 0 : (diff - sign) * (this.currentTabWidth - this.overlap)));
this.slideIntervals.Add(bound);
}
this.slideIntervals.Add(double.PositiveInfinity);
this.CaptureMouse();
}
else
{
int changed = 0;
if (this.slideIntervals != null)
{
if (margin.Left < this.slideIntervals[this.slideIndex - 1])
{
SwapSlideInterval(this.slideIndex - 1);
this.slideIndex -= 1;
changed = 1;
}
else if (margin.Left > this.slideIntervals[this.slideIndex + 1])
{
SwapSlideInterval(this.slideIndex + 1);
this.slideIndex += 1;
changed = -1;
}
}
if (changed != 0)
{
var rightedOriginalIndex = this.originalIndex + 1;
var diff = 1;
if (changed > 0 && this.slideIndex >= rightedOriginalIndex)
{
changed = 0;
diff = 0;
}
else if (changed < 0 && this.slideIndex <= rightedOriginalIndex)
{
changed = 0;
diff = 2;
}
ChromeTabItem shiftedTab = this.Children[this.slideIndex - diff] as ChromeTabItem;
if (shiftedTab != this.draggedTab)
{
StickyReanimate(shiftedTab, changed * (this.currentTabWidth - this.overlap), .13);
}
}
}
}
}
catch (Exception ex)
{
throw ex;
}
}
私有布尔拖动窗口;
私人规模融资;
私人双重重叠;
私人双左边距;
私人双右翼;
私有双最大宽度;
私人双宽度;
私人双违约度量衡;
私有双宽度;
私家侦探;
私人国际原始索引;
私有int slideIndex;
私有列表幻灯片间隔;
私用铬铁矿粉;
私有点下降点;
私有铬控父代;
公共Rect addButtonRect;
私人大小的addButtonSize;
公共按钮添加按钮;
私有布尔modifyLeftOffset,modifyTopOffset;
专用点源位置;
专用双origHorizOffset,origVertOffset;
PreviewMouseMove上受保护的覆盖无效(MouseEventArgs e)
{
尝试
{
基于PreviewMouseMove(e);
if(this.addButtonRect.Contains(e.GetPosition(this))&&this.addButton.Background!=刷子.White&&this.addButton.Background!=刷子.DarkGray)
{
this.addButton.Background=画笔.白色;
这是无效的;
}
如果(!this.addButtonRect.Contains(e.GetPosition(this))&&this.addButton.Background!=null),则为else
{
this.addButton.Background=null;
这是无效的;
}
如果(this.draggedTab==null | | this.draggingWindow){return;}
Point nowPoint=e.GetPosition(此);
this.addButton.Visibility=Visibility.Hidden;
双新水平偏移量;
if(此.modifyLeftOffset)
newHorizontalOffset=this.origHorizOffset+(nowPoint.X-this.origCursorLocation.X);
其他的
newHorizontalOffset=this.origHorizOffset-(nowPoint.X-this.origCursorLocation.X);
厚度裕度=新厚度(nowPoint.X-this.downPoint.X,0,this.downPoint.X-nowPoint.X,0);
this.draggedTab.Margin=保证金;
Rect elemRect=this.CalculatedLagelCenter(newHorizontalOffset,1);
bool leftAlign=elemRect.Left<0;
bool rightAlign=elemRect.Right>this.ActualWidth;
如果(左对齐)
newHorizontalOffset=modifyLeftOffset?0:this.ActualWidth-elemRect.Width;
else if(右对齐)
newHorizontalOffset=modifyLeftOffset?this.ActualWidth-elemRect.Width:0;
if(此.modifyLeftOffset)
Canvas.SetLeft(this.draggedTab,newHorizontalOffset);
其他的
Canvas.SetRight(this.draggedTab,newHorizontalOffset);
基于PreviewMouseMove(e);
如果(margin.Left!=0)
{
int guardValue=联锁增量(参考此captureGuard);
如果(guardValue==1)
{
this.originalIndex=this.draggedTab.Index;
this.slideIndex=this.originalIndex+1;
this.slideIntervals=新列表();
this.slideIntervals.Add(double.NegativeInfinity);
对于(int i=1;i this.slideIntervals[this.slideIndex+1])
{
SwapSlideInterval(此.slideIndex+1);
此.slideIndex+=1;
改变=-1;
}
}
如果(已更改!=0)
{
var rightedOriginalIndex=this.originalIndex+1;
var-diff=1;
如果(已更改>0&&this.slideIndex>=rightedOriginalIndex)
{
改变=0;
差异=0;
}
else if(已更改<0&&this.slideIndex