4

次のコードは、丸みを帯びたコンテナー内にメニュー バーを描画することになっています。底は丸くなっていますが、メニューの角は丸くなっていません。最も効率的であると思われたため、選択した回答の指示に従いました。

WPF Rounded Corner コンテナーを作成するにはどうすればよいですか?

記録のために、最新バージョンの WPF で .NET 4.5 を実行しています。これが私のコードです:

<Window
   xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
   xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Width="240" Height="320" Background="Black" >
      <Border BorderBrush="Red" CornerRadius="10" BorderThickness="1" Background="Gray" >
         <StackPanel>
          <Menu IsMainMenu="True" HorizontalAlignment="Stretch" >
                        <MenuItem Header="_File" />
                        <MenuItem Header="_Edit" />
                        <MenuItem Header="_View" />
                        <MenuItem Header="_Window" />
                        <MenuItem Header="_Help" />
                    </Menu>

         </StackPanel>
      </Border>
</Window>

編集: Chris Cavanagh によって提案されたより複雑なソリューションを示唆する同じ投稿に別の回答があります。彼のソリューションは単純でも高速でもありませんが、私が望んでいるコーナーを切り取ってくれます。質問ではクリッピングが指定されておらず、提案された回答も指定されていませんでした。うまくいけば、これを反映するために質問または回答が更新されます。

4

1 に答える 1

5

Chris Cavanagh は、丸め制御に関するブログ投稿を行っています。あなたが望むものを達成するのに役立つはずです。

編集: 以下はそのブログのコードです。

<Page xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Background="Black">
    <!-- Rounded yellow border -->
    <Border BorderThickness="3" BorderBrush="Yellow" CornerRadius="10" Padding="2" HorizontalAlignment="Center" VerticalAlignment="Center">
        <Grid>
            <!-- Rounded mask (stretches to fill Grid) -->
            <Border Name="mask" Background="White" CornerRadius="7"/>
            <!-- Main content container -->
            <StackPanel>
                <!-- Use a VisualBrush of 'mask' as the opacity mask -->
                <StackPanel.OpacityMask>
                    <VisualBrush Visual="{Binding ElementName=mask}"/>
                </StackPanel.OpacityMask>
                <!-- Any content -->
                <Image Source="https://chriscavanagh.files.wordpress.com/2006/12/chriss-blog-banner.jpg"/>
                <Rectangle Height="50" Fill="Red"/>
                <Rectangle Height="50" Fill="White"/>
                <Rectangle Height="50" Fill="Blue"/>
            </StackPanel>
        </Grid>
    </Border>
</Page>

クリップするコンテンツの兄弟として「マスク」ボーダー要素を含めるだけです。コンテンツでは、そのマスクにバインドされた VisualBrush を使用します。マスクはコンテンツに合わせて自動的にサイズが調整されるため、「設定して忘れる」という優れたソリューションです。

于 2013-02-12T08:14:34.257 に答える