2010-09-09 8 views
6

que han conseguido alguna fuente de WPF:La animación WPF arroja una excepción "La propiedad '' Antecedentes 'no apunta a un DependencyObject en la ruta' (0). (1) '."

<Window x:Class="WpfApplication2.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="MainWindow" Height="350" Width="525"> 

<Window.Resources> 
    <SolidColorBrush x:Key="RedBrush" Color="Red"/> 
    <SolidColorBrush x:Key="GreenBrush" Color="Green"/> 
    <SolidColorBrush x:Key="TransparentBrush" Color="Transparent"/> 

    <DataTemplate x:Key="MyItemTemplate"> 
     <Grid Margin="5"> 
      <Grid.ColumnDefinitions> 
       <ColumnDefinition /> 
      </Grid.ColumnDefinitions> 

      <TextBlock Background="{DynamicResource TransparentBrush}"> 
       <TextBlock.Style> 
        <Style> 
         <Style.Triggers> 
          <DataTrigger Binding="{Binding State}" Value="Stat1"> 
           <Setter Property="TextBlock.Background" Value="{DynamicResource RedBrush}" /> 
          </DataTrigger> 
          <DataTrigger Binding="{Binding State}" Value="Stat2">          
           <DataTrigger.EnterActions> 
            <BeginStoryboard> 
             <Storyboard RepeatBehavior="Forever"> 
              <ColorAnimation 
               Storyboard.TargetProperty="(TextBlock.Background).(SolidColorBrush.Color)" 
               Duration="00:00:01" 
               From="Yellow" To="Red"/> 
             </Storyboard> 
            </BeginStoryboard> 
           </DataTrigger.EnterActions> 
          </DataTrigger> 
         </Style.Triggers> 
        </Style> 
       </TextBlock.Style> 
       <TextBlock.Text> 
        <Binding Path="Name" /> 
       </TextBlock.Text> 
      </TextBlock> 
     </Grid> 
    </DataTemplate> 
</Window.Resources> 

<ListBox x:Name="SomeList" 
     HorizontalContentAlignment="Stretch" 
     VerticalContentAlignment="Top" 
     ScrollViewer.HorizontalScrollBarVisibility="Disabled" 
     ScrollViewer.VerticalScrollBarVisibility="Visible"    
     ItemTemplate="{StaticResource MyItemTemplate}"> 
    <ListBox.ItemsPanel> 
     <ItemsPanelTemplate> 
      <UniformGrid Columns="3" /> 
     </ItemsPanelTemplate> 
    </ListBox.ItemsPanel> 
</ListBox> 

que llenar la lista con:

public MainWindow() 
{ 
    InitializeComponent(); 

    myList_ = new List<Foo>(); 

    myList_.Add(new Foo() { State = "Stat1", Name = "Name 1" }); 
    myList_.Add(new Foo() { State = "Stat2", Name = "Name 2" }); 

    SomeList.ItemsSource = myList_; 
} 

El problema es que tengo una excepción 'Antecedentes' propiedad no apunta a un DependencyObject en la ruta '(0). (1)'. No sé por qué :-(¿Tiene andybody sabe?

Gracias respecto Michael

Respuesta

5

¿Hay alguna razón específica por la cual se utiliza en lugar de DynamicResourceStaticResource? Por lo que yo sé sólo se debe utilizar cuando el DynamicResource estilo se actualiza de forma dinámica

Si cambio la DynamicResource en StaticResource, el código está trabajando para mí

Editar:.. Este es el código º por lo trabajó para mí:

<Window x:Class="BackgroundTest.MainWindow" 
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
Title="MainWindow" Height="350" Width="525"> 

<Window.Resources> 
    <SolidColorBrush x:Key="RedBrush" Color="Red"/> 
    <SolidColorBrush x:Key="GreenBrush" Color="Green"/> 
    <SolidColorBrush x:Key="TransparentBrush" Color="Transparent"/> 

    <DataTemplate x:Key="MyItemTemplate"> 
     <Grid Margin="5"> 
      <Grid.ColumnDefinitions> 
       <ColumnDefinition /> 
      </Grid.ColumnDefinitions> 

      <TextBlock Background="{StaticResource TransparentBrush}"> 
      <TextBlock.Style> 
       <Style> 
        <Style.Triggers> 
         <DataTrigger Binding="{Binding State}" Value="Stat1"> 
          <Setter Property="TextBlock.Background" Value="{StaticResource RedBrush}" /> 
         </DataTrigger> 
         <DataTrigger Binding="{Binding State}" Value="Stat2">          
          <DataTrigger.EnterActions> 
           <BeginStoryboard> 
            <Storyboard RepeatBehavior="Forever"> 
             <ColorAnimation 
              Storyboard.TargetProperty="(TextBlock.Background).(SolidColorBrush.Color)" 
              Duration="00:00:01" 
              From="Yellow" To="Red"/> 
            </Storyboard> 
           </BeginStoryboard> 
          </DataTrigger.EnterActions> 
         </DataTrigger> 
        </Style.Triggers> 
       </Style> 
      </TextBlock.Style> 
      <TextBlock.Text> 
       <Binding Path="Name" /> 
      </TextBlock.Text> 
      </TextBlock> 
     </Grid> 
    </DataTemplate> 
</Window.Resources> 

<ListBox x:Name="SomeList" 
    HorizontalContentAlignment="Stretch" 
    VerticalContentAlignment="Top" 
    ScrollViewer.HorizontalScrollBarVisibility="Disabled" 
    ScrollViewer.VerticalScrollBarVisibility="Visible"    
    ItemTemplate="{StaticResource MyItemTemplate}"> 
    <ListBox.ItemsPanel> 
     <ItemsPanelTemplate> 
      <UniformGrid Columns="3" /> 
     </ItemsPanelTemplate> 
    </ListBox.ItemsPanel> 
</ListBox> 

Y mi MainWindow.xaml.cs:

public partial class MainWindow : Window 
{ 
    IList<Foo> myList_; 

    public MainWindow() 
    { 
     InitializeComponent(); 

     myList_ = new List<Foo>(); 

     myList_.Add(new Foo() { State = "Stat1", Name = "Name 1" }); 
     myList_.Add(new Foo() { State = "Stat2", Name = "Name 2" }); 

     SomeList.ItemsSource = myList_; 
    } 
} 
+0

Intenté todo para ponerlo en funcionamiento;) ¿Puede publicar la fuente XAML por favor? No puedo ejecutarlo :-(Gracias – Michael

+0

@Michael: Agregué el código que funcionó para mí. Espero que puedas hacer que tu código funcione. –

0

es un ejemplo de trabajo que podría ayudarle a continuación:

XAML:

<Storyboard x:Key="UpdateDetectedStoryboard"> 
     <ColorAnimationUsingKeyFrames Storyboard.TargetProperty="(TextBlock.Background).(SolidColorBrush.Color)" 
             Storyboard.TargetName="TextBlockUpdatesDetected"> 
      <EasingColorKeyFrame KeyTime="0:0:1" 
           Value="#f07FA7BA" /> 
     </ColorAnimationUsingKeyFrames> 
    </Storyboard> 



       <TextBlock Name="TextBlockUpdatesDetected"        
          Text="{x:Static res:Resource1.UpdatesDetected}" 
          FontSize="10" 
          Background="#FFD42121" /> 

Si Eres una estrella r la animación a partir de C# ...

   Storyboard animation = this.Resources["UpdateDetectedStoryboard"] as Storyboard; 
       animation.Begin(); 
8

Esta excepción se produce cuando no hay ninguna propiedad de fondo establecido en el TextBlock cuando la animación comienza. La solución de una sola línea es garantizar que establezca un fondo inicial en el TextBlock para empezar, y hacerlo a través del {DynamicResource} no garantiza eso para usted.

Cuestiones relacionadas