18

選択した ListBoxItem の背景色をシステム カラーではなく白に設定しようとしています。私は SO でここで見つけることができるものを読み、そこの推奨事項に従った、または従ったと信じています (選択したリストボックス項目の背景色を変更する、 WPF リストボックスがフォーカスを失ったときにリストボックスの選択した項目のテキストの色を変更する方法、選択した項目を変更するフォーカスされていないリストボックス スタイルをグレー表示にしないなど)。

選択した項目の HighlightBrush と ControlBrush を透明に設定することで、すべてが問題を解決するようです。次の XAML があり、フォントの色が適切に設定されていますが、ブラシの設定に関係なく、背景はデフォルトの透明な青です。私はまだ少し WPF 初心者なので、ここで単純なものが欠けているに違いありません。

<ListBox Width="Auto" Height="Auto" Grid.Column="0" BorderThickness="0" Background="#FFF3F3F3" xmlns:sys="clr-namespace:System;assembly=mscorlib">
    <ListBox.ItemsSource>
       <x:Array Type="{x:Type sys:String}">
          <sys:String>String 1</sys:String>
          <sys:String>String 2</sys:String>
          <sys:String>String 3</sys:String>
          <sys:String>String 4</sys:String>
       </x:Array>
    </ListBox.ItemsSource>
    <ListBox.ItemContainerStyle>
       <Style TargetType="ListBoxItem" BasedOn="{StaticResource {x:Type ListBoxItem}}">
          <Style.Resources>
             <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="Transparent" />
             <SolidColorBrush x:Key="{x:Static SystemColors.ControlBrushKey}" Color="Transparent" />
          </Style.Resources>
          <Setter Property="HorizontalContentAlignment" Value="Stretch" />
          <Setter Property="FontSize" Value="16"/>
          <Setter Property="Foreground" Value="#999999"/>
          <Style.Triggers>
             <Trigger Property="IsSelected" Value="True" >
                <Setter Property="Background" Value="White" />
                <Setter Property="Foreground" Value="Black" />
             </Trigger>
          </Style.Triggers>
       </Style>
    </ListBox.ItemContainerStyle>
    <ListBox.ItemTemplate>
       <DataTemplate>
          <TextBlock Text="{Binding}" HorizontalAlignment="Right" Margin="0,0,8,0" Background="Transparent"/>
       </DataTemplate>
    </ListBox.ItemTemplate>
 </ListBox>

正しい方向へのナッジをいただければ幸いです。

編集

わずかな変更でうまくいったという最初の回答を読んだ後、Windows 8 マシンで開発していたアプリケーションを Windows 7 VM で実行したところ、期待どおりに動作しました。これをWindows 8マシンとWindows 7で動作させるために何を変更する必要があるかについてのアイデアはありますか?

4

3 に答える 3

9

次のトリガーを Item DataTemplate に追加すると、Windows 10 で機能しました。

<DataTemplate x:Key="MyItemTemplate">
    <Border Name="Border" Background="Transparent" BorderBrush="LightGray" BorderThickness="0,1,0,0" Padding="0">
        <TextBlock Text="{Binding Text}" HorizontalAlignment="Left" FontWeight="Medium" />
    </Border>
    <DataTemplate.Triggers>
        <DataTrigger Binding="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type ListBoxItem}}, Path=IsSelected}" Value="True">
            <Setter TargetName="Border" Property="Background" Value="SkyBlue"/>
        </DataTrigger>
    </DataTemplate.Triggers>
</DataTemplate>
于 2016-08-29T16:56:19.063 に答える
0

選択したアイテムの背景を白くしたいだけですか?

あなたのコードから ControlBrushKey 設定を差し引いたものは私にとってはうまくいきます:

<Style.Resources>
<SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="White" />
</Style.Resources>
于 2013-05-29T16:56:17.587 に答える