2011-01-12 4 views
2

У меня есть Listbox со стилями, включая Listboxitem со стилями. Я пытаюсь создать анимацию, которая изменяет непрозрачность от 0 до 1, чтобы объекты отображались в списке. Я сумел сделать это с помощью следующего кода:анимация и непрозрачность ListBoxItem

<Style x:Key="ListBoxStyle1" TargetType="ListBox"> 
      <Setter Property="Foreground" Value="#FF393C3F" /> 
      <Setter Property="OverridesDefaultStyle" Value="true"/> 
      <Setter Property="Template"> 
       <Setter.Value> 
        <ControlTemplate TargetType="ListBox"> 
         <Border Name="Border" Background="{x:Null}" BorderBrush="Black" BorderThickness="0" Padding="0"> 
          <ItemsPresenter /> 
         </Border> 
        </ControlTemplate> 
       </Setter.Value> 
      </Setter> 
     </Style> 

     <Style x:Key="ListBoxItemStyle1" TargetType="ListBoxItem"> 
      <Setter Property="Opacity" Value="0" /> 
      <Setter Property="Height" Value="16" /> 
      <Setter Property="VerticalContentAlignment" Value="Bottom" /> 
      <Setter Property="VerticalAlignment" Value="Bottom" /> 
      <Setter Property="Template"> 
       <Setter.Value> 
        <ControlTemplate TargetType="ListBoxItem"> 
         <Border Name="Border" Padding="10,1,0,0" Background="{x:Null}"> 
          <ContentPresenter VerticalAlignment="Center" SnapsToDevicePixels="True" /> 
         </Border> 
         <ControlTemplate.Triggers> 
          <Trigger Property="IsSelected" Value="true"> 
           <Setter TargetName="Border" Property="Background" Value="{StaticResource arrow}" /> 
          </Trigger> 
          <Trigger Property="IsMouseOver" Value="true"> 
           <Setter Property="Foreground" Value="#FF828689" /> 
          </Trigger> 
          <Trigger Property="IsVisible" Value="true"> 
           <Trigger.EnterActions> 
            <BeginStoryboard> 
             <Storyboard> 
              <DoubleAnimation Storyboard.TargetProperty="Opacity" From="0.0" To="1.0" Duration="0:0:0.4" /> 
             </Storyboard> 
            </BeginStoryboard> 
           </Trigger.EnterActions> 
          </Trigger> 
         </ControlTemplate.Triggers> 
        </ControlTemplate> 
       </Setter.Value> 
      </Setter> 
     </Style> 

Дело работает как следует (кроме этого я хочу больше времени, чтобы пройти между текущей и следующей анимации пункт запуска Но у него есть проблемы с непрозрачностью. ... все возможно устанавливаются прозрачным, фоны и все и я использую прозрачный .png кисть для выбранного элемента

проблемы с непрозрачностью анимацией и лучше всего виден на нижнем рисунке:

Screenshot

Это скриншот в середине анимации (в то время как непрозрачность listboxitems равна 0,8), и вы можете четко видеть белый фон вокруг всего текста. Это еще более заметно в первом выбранном элементе, потому что он использует прозрачный .png. Этот фон волшебным образом исчезает, когда анимация закончена, а непрозрачность - 1,0.

Как исправить эту проблему? Неужели я забыл установить какой-либо фон?

Благодарим за помощь!

Edit:

Я добавляю мое ListBox заявление:

<ListBox Height="239" HorizontalAlignment="Left" Margin="0,0,0,0" Name="listBox1" VerticalAlignment="Top" Width="145" Background="{x:Null}" FontWeight="Black" FontSize="8" BorderBrush="{x:Null}" SnapsToDevicePixels="True" BorderThickness="0" ItemContainerStyle="{StaticResource ListBoxItemStyle1}" Style="{StaticResource ListBoxStyle1}"> 
    <ListBox.ItemsPanel> 
     <ItemsPanelTemplate> 
      <VirtualizingStackPanel VerticalAlignment="Top" Background="{x:Null}" /> 
     </ItemsPanelTemplate> 
    </ListBox.ItemsPanel> 
</ListBox> 

Также еще один вопрос: Как задержать анимации, что каждый ListBoxItem будет отображаться с задержкой нескольких миллисекунд до следующего ?

Благодарим за помощь.

+0

Можете ли вы добавить объявление в виде списка? Я включил этот стиль в одну из моих программ и не имею проблемы, с которой вы сталкиваетесь. –

+0

Спасибо за ваш ответ, Скотт. Я добавил вам свою декларацию по списку. Я провел еще несколько тестов, и это абсолютно не зависит от системы. Проблема в моем приложении или в WPF. Для этой проблемы не требуется анимация. Второй элемент списка содержит непрозрачность, установленную в стиле, отличном от 0 или 1.0, с белым фоном. Даже элементы списка без фонового изображения. Изображение в моем сообщении отображается в 0,8 непрозрачности списка. – Legoless

ответ

0

Я исправил проблему. Проблема заключалась в том, что в коде я переопределял флаг AllowTransparency окна. Теперь он работает так, как должен. Если кто-то столкнется с подобной проблемой.

0

Это может быть зависящая от системы аномалия рендеринга, я пробовал этот стиль (мне приходилось использовать только собственное изображение выбранного элемента, а также прозрачный PNG), и он работал довольно хорошо.
В одном применении шахтных набора изображений в Fill свойстве Rectangle с были причудливо раскинулся на одном из моих компьютеров (даже имел ту же операционную систему, Win7 Professional), так что не было бы неслыханно ...

+0

Спасибо за ваш ответ, но я не думаю, что вы правы, так как он делает то же самое на нескольких компьютерах. Я думаю, что это проблема WPF, то, что ее вызывает, вероятно, является частью другого стиля/шаблона, а не этого. Как только я непрозрачность отличается от 0 или 1, я получаю белый фон с элементами. Просто, как это выглядит на картинке, которую я опубликовал. Попробуйте помещать заполнение для фона в своем приложении и дайте мне знать, если он работает. С уважением. – Legoless

+0

Попробуйте поместить фон в оттенок белого, например #DDDDDD (я использовал # FAF6F9). – Legoless

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