2012-01-18 21 views
3

の複製:私は現在、このような画面を作成しようとしているWin7のネットワークのフライアウトリフレッシュボタン

Image

ビジュアルスタイルの部品を閲覧するthis toolを使用して述べて、私はあることを底面積を見つけましたFLYOUT_LINKPANEL。

しかし、更新ボタンはどうですか?私は同じ振る舞いを持つボタンは見つけられません。ホバーまでバックグラウンドはありません。 さらに、私は、そのリフレッシュアイコン–ダイスを複製するアイコンのためにshell32のdllを調べてみました。リフレッシュアイコンはExplorerFrame.dllのビットマップです。

私はWinSpy ++にウィンドウを突っ込んでもらうことを試みましたが、無効にするとすぐに消えてしまいます。

アドバイス?

+0

このパネルはWPFで作成されていませんか? –

答えて

0

ここに実装例があります。画像は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); 
      } 
     } 
    } 
0

これは、1つのリフレッシュボタンが付いた標準的なツールストリップのようです。

C# ToolStrip is transparent but border is still visible?に記載されている方法を使用すると、透明にすることができます。

私は%SystemRoot%\ system32 \ shell32.dllをチェックしました。これに非常によく似たアイコンがあります。

+0

ToolStripボタンのホバー状態は透明なガラス効果ですか?ネットワークフライアウトでは、ホバーオーバーしていないときにはバックグラウンドのない標準ボタンと思われます(また、点線の輪郭もあります)。 – unrelativity

+0

私自身の質問には答えましたが、あなたの答えが最終的な解決策で私を少し助けてくれたので、賞金を授与してください。 – unrelativity

関連する問題