ここに実装例があります。画像はExplorerFrameから抽出できます。
このクラスの最初の試みでは、ホバリング時にボタンのFlatStyleを単に反転させましたが、ボタンを上に置いたときは常に画像が位置をずらしました。
また、クラスはではありません。フライアウトのボタンを忠実に複製します。画像をシフトするのではなく押した状態になり、アクティブのときに点線の輪郭線を描画しません。しかし、これはWindowsでボタンがどのように機能するかに反するため、これは動作を再現しませんでした。
public class FlyoutImageButton : Button
{
bool _isHovering = false;
public FlyoutImageButton() : base()
{
MouseEnter += (sender, e) => _isHovering = true;
MouseLeave += (sender, e) => _isHovering = false;
}
protected override void OnPaint(PaintEventArgs e)
{
if (_isHovering)
base.OnPaint(e);
else
{
if (this.Image != null)
{
e.Graphics.Clear(BackColor);
if (this.Enabled)
e.Graphics.DrawImageUnscaled(
this.Image,
(this.Width - this.Image.Width)/2,
(this.Height - this.Image.Height)/2);
else
ControlPaint.DrawImageDisabled(
e.Graphics,
this.Image,
(this.Width - this.Image.Width)/2,
(this.Height - this.Image.Height)/2,
BackColor);
}
if (this.DesignMode)
ControlPaint.DrawBorder(
e.Graphics, ClientRectangle, SystemColors.ControlDarkDark, ButtonBorderStyle.Dashed);
}
}
}
このパネルはWPFで作成されていませんか? –