私はToolStrip(GripStyle:Hidden、Dock:Top、RenderMode:ManagerRenderMode)でかなり標準のMainFormを持っているWindows Formアプリケーション(C#、.NET 4.0、VS 2010)を使っています。ツールストリップには、基本的な項目がいくつか含まれています(ToolStripLabel、ToolStripSeparator、ToolStripSplitButton)。ToolStrip Rounded Corners
次のようにこれがレンダリングされます。まず
私は単にのToolStrip以下「ボトム」の境界線を追加したいが、私はまた、(これのToolStripが「角丸」でレンダリングされていることに気づきました画像の右上と下のものを見ることができます)、および垂直グラデーションライン。
これらのコーナーを丸めないにはどうすればよいですか?
私が試した:
public class MainFormToolStripRenderer : ToolStripProfessionalRenderer
{
protected override void OnRenderToolStripBorder(ToolStripRenderEventArgs e)
{
base.OnRenderToolStripBorder(e);
var y = e.ToolStrip.Height-1;
e.Graphics.DrawLine(new Pen(SystemColors.ControlDark, 1), new Point(0, y), new Point(e.ToolStrip.Width, y));
}
をそして、私のフォームの初期化でthis.toolStrip_Actions.Renderer=new MainFormToolStripRenderer();
を経由してそれを有線。
これは私に下の境界線を与えましたが、丸い角のために何もしませんでした。また、添加下罫線と、丸い角は、より顕著である。
次に、私は(少なくとも)丸い角と垂直を隠そうとする、上記と同じイベントハンドラの間に四角形を描画しようとしました実線の四角い枠の後ろのグラデーション。使用可能な描画領域(e.AffectedBounds)が丸められた境界内にあるため、これは機能しませんでした。
また、ToolStripのRenderModeをSystemに設定しようとしましたが、私のレンダラーは使用しませんでした。この場合、ツールストリップの角はぴったり合っているように見えますが(長方形)、ツールバー内の分割ボタンが破損しているように見えます(下矢印をクリックしてもドロップダウンは表示されません)。あなたがツールストリップのいくつかのボタンにカーソルを置くまでは、かなり不安です。
私は最後に、ManageeRenderedMode、またはプロフェッショナルなものを継承したカスタムレンダラーを使用したいと思いますが、丸みを帯びたコーナーを取り除く必要があります。 とりわけ、私はthis SO Qが私が見ているものに近いと思われるが、私の場合は答えを与えていないことが分かった。事前に
おかげ
Winformsは、独自のコントロールを完全に作成することなく、何かをレンダリングする際の痛みです。今は遅すぎるかもしれませんが、WPF/XAMLを使いこなしましたか? – iMortalitySX
ありがとうございましたが、以前はWPFを見ていましたが、今は "基本的な" winformsに固執しようとしています。私は特定の詳細をオーバーライドする必要がある場合、標準のToolstripを継承しても構いませんが、ええ、私たち自身ですべてをレンダリングする必要はありません。 ) – FOR