Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.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# 防止Chrome标签被拖出窗口屏幕_C#_Windows_Google Chrome_Tabs - Fatal编程技术网

C# 防止Chrome标签被拖出窗口屏幕

C# 防止Chrome标签被拖出窗口屏幕,c#,windows,google-chrome,tabs,C#,Windows,Google Chrome,Tabs,我目前正在开发一个使用tab的程序,就像Google Chrome tab一样, 标签工作正常,没问题。 但我进入了一个条件,我甚至可以将标签拖出显示器屏幕(左边缘和右边缘) 问题是,如何限制标签拖到屏幕边缘?? 因此选项卡将不会通过屏幕。基本上,这只是关于审美目的。。 请注意,我已经在谷歌和这个网站上做了研究,但仍然不知道怎么做 这是一段代码 private bool draggingWindow; private Size finalSize; private dou

我目前正在开发一个使用tab的程序,就像Google Chrome tab一样, 标签工作正常,没问题。 但我进入了一个条件,我甚至可以将标签拖出显示器屏幕(左边缘和右边缘)

问题是,如何限制标签拖到屏幕边缘?? 因此选项卡将不会通过屏幕。基本上,这只是关于审美目的。。 请注意,我已经在谷歌和这个网站上做了研究,但仍然不知道怎么做

这是一段代码

    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