2013-06-11 2 views
1

Я делаю небольшую модификацию кода, который я нашел в соответствующей статье stackoverflow. Я внес незначительные изменения в фон ListBoxItem в IsMouseOver и IsSelected с помощью триггера. В моей версии я хочу использовать градиент для фона:WPF set ListBoxItem background в триггере

<Style x:Key="ListboxItemStyle" TargetType="{x:Type ListBoxItem}"> 
     <Setter Property="Margin" Value="1,2,1,1"/> 
     <Setter Property="HorizontalAlignment" Value="Stretch" /> 
     <Setter Property="Background" Value="White" /> 
     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="{x:Type ListBoxItem}"> 
        <Grid> 
         <Border Background="{TemplateBinding Background}" /> 
         <Border Background="LightGray" Margin="0,0"> 
          <Grid> 
           <Grid.RowDefinitions> 
            <RowDefinition /> 
            <RowDefinition /> 
           </Grid.RowDefinitions> 
           <!--<Border Margin="2,1,2,0" Grid.Row="0" Background="#57FFFFFF" />--> 
           <Border Margin="2,1,2,0" Grid.Row="0"> 
            <Border.Background > 
             <LinearGradientBrush StartPoint=".5,0" EndPoint="0.5,1" > 
              <GradientStop Color="White" Offset="0" /> 
              <GradientStop Color="LightGray" Offset="1" /> 
             </LinearGradientBrush> 
            </Border.Background> 
           </Border> 
          </Grid> 
         </Border> 
         <ContentPresenter Margin="0,5" /> 
        </Grid> 
        <ControlTemplate.Triggers> 
         <MultiTrigger> 
          <MultiTrigger.Conditions> 
           <Condition Property="IsMouseOver" Value="True" /> 
           <Condition Property="IsSelected" Value="False"/> 
          </MultiTrigger.Conditions> 
          <!--<Setter Property="Background" Value="#CCCBAF00" /> 
          <Setter Property="Opacity" Value="0.8" />--> 
          <Setter Property="Background"> 
           <Setter.Value> 
            <LinearGradientBrush StartPoint=".5,0" EndPoint="0.5,1" Opacity="0.8"> 
             <GradientStop Color="#CCC9BA5C" Offset="0" /> 
             <GradientStop Color="#CCCBAF00" Offset="1" /> 
            </LinearGradientBrush> 
           </Setter.Value> 
          </Setter> 
         </MultiTrigger> 
         <Trigger Property="IsSelected" Value="True"> 
          <!--<Setter Property="Background" Value="#CCCB6400" /> 
          <Setter Property="Opacity" Value="0.8" />--> 
          <Setter Property="Background"> 
           <Setter.Value> 
            <LinearGradientBrush StartPoint=".5,0" EndPoint="0.5,1" Opacity="0.8"> 
             <GradientStop Color="#CCCD8B4C" Offset="0" /> 
             <GradientStop Color="#CCCB6400" Offset="1" /> 
            </LinearGradientBrush> 
           </Setter.Value> 
          </Setter> 
         </Trigger> 
        </ControlTemplate.Triggers> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
    </Style> 
    <Style x:Key="ListBoxStyle" TargetType="{x:Type ListBox}"> 
     <Setter Property="ItemContainerStyle" Value="{DynamicResource ListboxItemStyle}" /> 
     <Setter Property="Margin" Value="3,3,2,1" /> 
    </Style> 

Но это не сработает с этой модификацией. Благодаря!

ответ

1

Просто включите

<Border Background="LightGray" Margin="0,0"> 

к чему-то вроде

<Border Background="LightGray" Margin="0,0" Opacity="0.5"> 

сделать ^^ Border просвечивающее

+0

Спасибо! Это работает отлично. – zzMzz

1

Я вижу, что у вас есть один пограничный контроль, перекрывающий другой. Первая граница (фон которой привязан к шаблону) никогда не будет виден. Итак, когда вы изменяете фон ListBoxItem в триггере, вы не видите его, потому что он скрыт под другой границей. Вы можете либо иметь только один элемент управления границей, либо установить видимость на второй пограничный элемент, который будет скрыт в ваших триггерах.

Смежные вопросы