【解決方法】WPFでコンボボックスアイテムの角を丸くするにはどうすればよいですか?


こんにちは、みんな
誰かこれについて助けてくれませんか?
コンボボックス内の項目の角を丸くする必要があります。
つまり、それぞれです。
なぜなら、私のアイテムはそれぞれ色が異なるからです。
ありがとう。

私が試したこと:

XML
<ComboBoxItem x:Name="Item25" OverridesDefaultStyle="True" Foreground="Red" Background="Green" Content="Item No. 25" HorizontalContentAlignment="Center" VerticalContentAlignment="Center" ScrollViewer.VerticalScrollBarVisibility="Disabled">
    <Border CornerRadius="8"/>
</ComboBoxItem>

解決策 1

何か調査してみましたか?

例えば KAILASH のブログ: 角丸 WPF コンボボックス[^]

解決策 2

必要なのは、スタイルをオーバーライドすることです。 これで何を実現しようとしているのかあまり想像できないので、選択した項目のみに丸い枠線があり、背景が緑色に設定されている例を示します。 実際には次のようなものを試してみる必要があります。

XML
<Window x:Class="RoundedComboBoxItem.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:RoundedComboBoxItem"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800"
  xmlns:theme="clr-namespace:Microsoft.Windows.Themes;assembly=PresentationFramework.Aero2">

  <Window.Resources>
    <Style 
       TargetType="{x:Type ComboBoxItem}">
      <Setter Property="SnapsToDevicePixels"
          Value="true" />
      <Setter Property="OverridesDefaultStyle"
          Value="true" />
      <Setter Property="Foreground" Value="Red" />
      <Setter Property="Template">
        <Setter.Value>
          <ControlTemplate TargetType="{x:Type ComboBoxItem}">
            <Border x:Name="Border"
                Padding="2"
                SnapsToDevicePixels="true"
                Background="Transparent"
                    CornerRadius="8"
                >
              <VisualStateManager.VisualStateGroups>
                <VisualStateGroup x:Name="SelectionStates">
                  <VisualState x:Name="Unselected" />
                  <VisualState x:Name="Selected">
                    <Storyboard>
                      <ColorAnimationUsingKeyFrames Storyboard.TargetName="Border"
                                                Storyboard.TargetProperty="(Panel.Background).
                    (SolidColorBrush.Color)">
                        <EasingColorKeyFrame KeyTime="0"
                                         Value="Green" />
                      </ColorAnimationUsingKeyFrames>
                    </Storyboard>
                  </VisualState>
                </VisualStateGroup>
              </VisualStateManager.VisualStateGroups>
              <ContentPresenter />
            </Border>
          </ControlTemplate>
        </Setter.Value>
      </Setter>
    </Style>
  </Window.Resources>

  <Grid>
    <ComboBox HorizontalAlignment="Left" Margin="154,133,0,0" VerticalAlignment="Top" Width="372">
      <ComboBoxItem Content="Item No. 23" />
      <ComboBoxItem Content="Item No. 24"/>
      <ComboBoxItem Content="Item No. 25">
      </ComboBoxItem>
    </ComboBox>

  </Grid>
</Window>

コメント

タイトルとURLをコピーしました