2011-01-12 15 views
2

私は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

これは、アニメーションの途中のスクリーンショット(リストボックスの不透明度が0.8のとき)であり、すべてのテキストの周りに白い背景がはっきりと表示されます。透明な.pngを使用しているため、最初に選択した項目ではさらに目立ちます。アニメーションが終了し、不透明度が1.0になると、この背景は魔法のように消えてしまいます。

この問題を解決するにはどうすればよいですか?私はおそらく背景を設定することを忘れましたか?

ありがとうございました!

編集:

私は私のリストボックスの宣言を追加してい:

<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です。この問題のアニメーションは必要ありません。 2番目のリストボックス項目は、0または1.0とは異なるスタイルで不透明度が設定され、白い背景でレンダリングされます。バックグラウンド画像のないリストボックス項目さえも。私のポストの画像は、リストボックスの0.8不透明度でレンダリングされます。 – Legoless

答えて

0

私は問題を解決しました。問題は、コードでは、私はウィンドウのAllowTransparencyフラグをオーバーライドしていたということでした。今はそれが必要なように動作します。誰かが同様の問題に遭遇した場合。

0

これはシステムに依存するレンダリング異常かもしれません。私はそのスタイルを試しました(自分の選択したアイテムイメージと透明なPNGも使用しなければなりませんでした)。 Rectangle秒のFillプロパティに設定され、鉱山の画像の1回の適用で
は変なふうに(同じであっても、オペレーティング・システム、win7のプロフェッショナルを持っていた)私のコンピュータのいずれかに延伸したので、それは前代未聞ではないでしょう...

+0

あなたの答えをありがとう、しかし、それは複数のコンピュータで同じレンダリングするので、私はあなたが正しいとは思わない。私はそれがWPFの問題だと思う、それを引き起こすものは、おそらく別のスタイル/テンプレートの一部であり、この1つではない。 不透明度が0または1と異なると、項目が白い背景になります。ちょうどそれは私が投稿した写真を見ている。あなたのアプリに背景の塗りつぶしを入れ、それが動作しているかどうか教えてください。よろしく。 – Legoless

+0

#DDDDDD(私は#FAF6F9を使用していました)のような白い色調の背景を入れてみてください。 – Legoless