1

我正在使用 Windows 窗体,我想在面板的左上角放置一个背景图像。我想height:width-ratio保留图像的原件,并且图像应该尽可能地填充控件。

ImageLayout.Zoom使图像居中,这是我不喜欢的,但保留了良好的比例。 ImageLayout.Stretch根据需要将图像放在左上角(在所有其他角落),但不保留比例。

到目前为止,我使用的方法是在我的面板中放置一个图片框,当父级调整大小时,它会根据其父级的大小调整大小。我可以达到预期的效果,但我觉得必须有更好的内置方式。

4

1 回答 1

2

试试这个:

public class CustomPanel : Panel
{
    int x, y;
    public CustomPanel()
    {
        DoubleBuffered = true;
    }
    float scale;
    protected override void OnBackgroundImageChanged(EventArgs e)
    {
        scale = (float)BackgroundImage.Width / BackgroundImage.Height;
        base.OnBackgroundImageChanged(e);
    }
    protected override void OnPaintBackground(PaintEventArgs e)
    {
        if(BackgroundImage == null) base.OnPaintBackground(e);                        
        else {
         e.Graphics.FillRectangle(new SolidBrush(BackColor), ClientRectangle);
         e.Graphics.DrawImage(BackgroundImage, new Rectangle(0, 0, x,y));
        }
    }
    protected override void OnSizeChanged(EventArgs e)
    {
        if (scale > (float)Width / Height)
        {
            x = Width;
            y = (int)(Width / scale);
        }
        else
        {
            y = Height;
            x = (int)(Height * scale);
        }
        base.OnSizeChanged(e);
    }
}
于 2013-06-12T16:36:56.527 回答