web-dev-qa-db-ja.com

WPFリストボックス、境界線を非表示にして選択したアイテムの背景色を変更する方法

ListBoxの枠を非表示にして、選択した項目の背景を選択していないものと同じにしたいのですが。

どうすればよいですか?

31
deerchao

境界線を隠すには、

<ListBox BorderThickness="0"/>

選択したくない場合は、ItemsControlの代わりにListBoxを使用してください。

次のコードは、ListBoxの周囲の境界線を非表示にし、アイテムの背景を常に白く表示します(ItemsSource- propertyで生成された場合)。

<ListBox BorderThickness="0" HorizontalContentAlignment="Stretch">
    <ListBox.ItemContainerStyle>
        <Style TargetType="ListBoxItem">
              <Setter Property="Padding" Value="0"/>
        </Style>
    </ListBox.ItemContainerStyle>
    <ListBox.ItemTemplate>
        <DataTemplate>
            <Grid Background="White">
                <ContentPresenter Content="{Binding}"/>
            </Grid>
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

ListViewItem-instancesを使用する場合は、そこで背景を変更する必要があります。

[〜#〜]更新[〜#〜]

それまでの間、IMOがはるかにエレガントなソリューションを見つけました。

<ListBox BorderThickness="0" HorizontalContentAlignment="Stretch"  >
    <ListBox.Resources>
        <Style TargetType="ListBoxItem">
            <Style.Resources>
                <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="Transparent"/>
                <SolidColorBrush x:Key="{x:Static SystemColors.ControlBrushKey}" Color="Transparent"/>
                <SolidColorBrush x:Key="{x:Static SystemColors.HighlightTextBrushKey}" Color="Black"/>
            </Style.Resources>
        </Style>
    </ListBox.Resources>                
</ListBox>

これはListBoxItem-instancesでも機能するはずで、IMOの「回避策」が少なくなっています。

53
HCL