2010-02-05 11 views
1

J'ai un ResourceDictionary qui consiste en un objet Brush et un Style utilisant cet objet Brush pour plusieurs propriétés animées dans sa propriété Template (via l'extension de balisage StaticResource). Le problème est; lorsque je fusionne le dictionnaire avec l'application globale ResourceDictionary (Application.Resources), le pinceau n'est pas figé et chaque élément partageant le style est affecté par les modifications apportées au pinceau. De manière intéressante, lorsque je déplace le pinceau vers un ResourceDictionary fusionné secondaire, il se bloque et tout fonctionne comme prévu (le freezable est cloné avant d'être animé) Le problème survient seulement lorsqu'un objet freezable et une autre ressource référençant cet objet via l'extension de balisage StaticResource réside dans le même ResourceDictionary fusionné. J'ai collé l'exemple de code pour App.xaml, Window.xaml et Dictionary.xaml ci-dessous. J'apprécierais grandement que vous puissiez reproduire le même résultat et confirmer qu'il s'agit d'un bug dans WPF. REMARQUE: Si vous modifiez le type de contenu de ResourceDictionary (Dictionary.xaml) de Page en ressource dans Visual Studio (et incorporez un XAML à la place de la version BAML dans l'assembly compilé) le problème disparaît.WPF Incompatibilité de ResourceDictionary

Window.xaml

<Window x:Class="WpfApplication1.Window" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Height="300" Width="300"> 
<StackPanel> 
    <Button Height="30" Content="Test 1" Margin="5" /> 
    <Button Height="30" Content="Test 2" Margin="5" /> 
</StackPanel> 

App.xaml

<Application x:Class="WpfApplication.App" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" StartupUri="Window.xaml"> 
<Application.Resources> 
    <ResourceDictionary> 
     <ResourceDictionary.MergedDictionaries> 
      <ResourceDictionary Source="Dictionary.xaml" /> 
     </ResourceDictionary.MergedDictionaries> 
    </ResourceDictionary> 
</Application.Resources> 

Dictionary.xaml

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> 
<SolidColorBrush x:Key="backgroundBrush" Color="Aqua" /> 

<Style TargetType="{x:Type Button}"> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="{x:Type Button}"> 
       <Border Name="border" Background="{StaticResource backgroundBrush}"> 
        <ContentPresenter /> 
       </Border> 

       <ControlTemplate.Triggers> 
        <Trigger Property="IsPressed" Value="True"> 
         <Trigger.EnterActions> 
          <BeginStoryboard> 
           <Storyboard> 
            <DoubleAnimation Storyboard.TargetName="border" Storyboard.TargetProperty="Background.Opacity" To="0" Duration="0:0:.2" /> 
           </Storyboard> 
          </BeginStoryboard> 
         </Trigger.EnterActions> 

         <Trigger.ExitActions> 
          <BeginStoryboard> 
           <Storyboard> 
            <DoubleAnimation Storyboard.TargetName="border" Storyboard.TargetProperty="Background.Opacity" To="1" Duration="0:0:.2" /> 
           </Storyboard> 
          </BeginStoryboard> 
         </Trigger.ExitActions> 
        </Trigger> 
       </ControlTemplate.Triggers> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

Répondre

Questions connexes