图片框如何居中

How to centre picture box

我正在尝试将 this plugin 用于 C#,效果很好。但是,放大时我很难让图像居中。默认情况下,无论何时缩放,图片框都会聚焦在左上角。我希望它集中在中心。

有什么想法吗?我进行了广泛的搜索,但找不到在此插件中执行此操作的示例。

好的,这越来越复杂了,所以我会写下完整的答案:

插件未以您可以挂接缩放事件的方式打开。实际上,您可以做的(因为您有开源)是 "hack" 内部 - 更改源代码并根据您的需要进行调整。

选项:

1.更改内部实现:

进入文件 ScalablePictureBoxImp.cs ,找到方法 ScalePictureBoxToFit(),并在行后添加代码:

//some previous code
this.pictureBox.Left = left;
this.pictureBox.Top = top;
this.AutoScroll = true;

// add this line under:
this.AutoScrollPosition = new Point(this.Width / 2, this.Height / 2);

现在您可以像以前一样简单地使用该组件,它只需在中间调整它们的大小即可完成所有操作(可能需要更多数学运算才能正确适合屏幕)。

2。更改外部实现:

作者正在为内部实现使用包装器,他正在连接事件而您只是在使用包装的对象(这就像按下鼠标上的按钮而不是将一根电线与其他电线连接)。

在文件 ScalablePictureBox.cs 中编辑构造函数并添加以下实现:

public ScalablePictureBox()
{
    //some code ...


    this.pictureTracker.ScrollPictureEvent += new PictureTracker.ScrollPictureEventHandler(this.scalablePictureBoxImp.OnScrollPictureEvent);
    this.pictureTracker.PictureTrackerClosed += new PictureTracker.PictureTrackerClosedHandler(this.pictureTracker_PictureTrackerClosed);

    //Enter the line below to hook on event
     this.scalablePictureBoxImp.ZoomRateChangedEvent += ScalablePictureBoxImp_ZoomRateChangedEvent;
}

现在你已经勾上了缩放事件,你只需要调整滚动:

private void ScalablePictureBoxImp_ZoomRateChangedEvent(int zoomRate, bool isFullPictureShown)
{
    this.scalablePictureBoxImp.AutoScrollPosition = new Point(this.Width / 2, this.Height / 2);
}

ScalablePictureBox 的内部实现正在调用事件 ZoomRateChangedEvent -> 一旦缩放发生变化,您将获得 window 的大小并将滚动按钮移动到中间位置。这可以按您需要的任何方式进行调整。

我相信,最初的作者只想写 ScalablePictureBoxImp 并且添加包装只是为了 test/simply 案例目的。这完全取决于您自己编写还是调整 -> 正确的方法应该是使用外部实现。