2010-09-09 59 views
6

我已經得到了一些WPF來源:WPF動畫拋出異常「'Background'屬性不指向路徑'(0)。(1)'中的DependencyObject。」

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

我填寫清單,:

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)。(1)'中的DependencyObject。 我不知道爲什麼:-(是否andybody知道嗎?

感謝 問候 邁克爾

回答

5

是否有一個具體的理由,爲什麼你使用DynamicResource代替StaticResource?據我所知,你應該只使用DynamicResource當如果我更改了StaticResourceDynamicResource,代碼爲我工作風格是動態更新的

編輯:。以下是代碼次在爲我工作:

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

而且我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

我嘗試了一切來讓它運行;)您能否發佈XAML源代碼?我不能讓它運行:-(謝謝 – Michael 2010-09-09 17:05:47

+0

@Michael:我添加了對我有用的代碼,希望你能讓你的代碼工作。 – 2010-09-09 18:04:57

0

這裏的工作的例子,可以幫助你:

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" /> 

如果你是明星從C#播放動畫...

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

當動畫開始時,如果在TextBlock上沒有設置Background屬性,則會引發此異常。單線解決方案是爲了確保您在TextBlock中設置初始背景,並且通過{DynamicResource}來做到這一點並不能保證爲您服務。