ClippingBorder

no clip


こんにちは、ずっと書いてないので死んだと思われている siokoshou です。このところ WPF にがっつりと取り組んでいます。なので、WPF ネタをときどき書こうかなぁと。エッセンシャルWPF:Windows Presentation Foundation (Programmer's SELECTION) がとても役に立ってます。酷使しすぎて背表紙が壊れかけてたり。

さて、今日は Border の CornerRadius の話。Border では丸みを帯びた枠だけを書いて、背景は Border の子供が塗る場合、みごとにはみ出します!そういえば、ClipToBounds ってのがあったなぁと試してみてもクリップされません(^^;

<Border BorderBrush="{TemplateBinding BorderBrush}"
  BorderThickness="{TemplateBinding BorderThickness}"
  CornerRadius="10" SnapsToDevicePixels="true">
  <DockPanel>
    <Grid DockPanel.Dock="Top" Background="{TemplateBinding Background}">
...

そんなわけでぐぐってみると、MS の中の人が書いた解決コードがあったのでリンクしておきます。最後のほうの投稿にある、ClippingBorder クラスを使うときれいにクリップできました。

http://social.msdn.microsoft.com/forums/en-US/wpf/thread/3364bdd1-0e74-41cb-9cb9-d91f02443ceb/

ClipToBounds はレイアウトの動作らしい。まぎらわしい。