2010-09-09 19 views
6

Tôi đã có một số nguồn WPF:Hoạt ảnh WPF ném thuộc tính Ngoại lệ "'Nền" không trỏ đến DependencyObject trong đường dẫn' (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> 

tôi điền vào danh sách với:

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_; 
} 

Vấn đề là, rằng tôi đã nhận một ngoại lệ 'nền' bất động sản không trỏ vào DependencyObject trong đường dẫn '(0). (1)'. Tôi không biết lý do tại sao :-(Có andybody biết?

Cảm ơn liên quan Michael

Trả lời

5

Có một lý do cụ thể tại sao bạn sử dụng DynamicResource thay vì StaticResource? Theo như tôi biết bạn chỉ nên sử dụng khi DynamicResource phong cách được cập nhật tự động

Nếu tôi thay đổi DynamicResource trong StaticResource, mã đang làm việc cho tôi

Edit:.. đây là đoạn mã thứ tại làm việc cho tôi:

<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 tôi:

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

Tôi đã thử mọi thứ để chạy;) Bạn có thể đăng nguồn XAML không? Tôi không thể làm cho nó chạy :-(Cảm ơn – Michael

+0

@Michael: Tôi đã thêm mã làm việc cho tôi. Hy vọng bạn có thể làm cho mã của bạn hoạt động. –

0

Dưới đây là một ví dụ làm việc có thể giúp bạ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" /> 

Nếu bạn là ngôi sao ting hoạt ảnh từ C# ...

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

Ngoại lệ này được ném khi không có thuộc tính nền được đặt trên TextBlock khi hoạt ảnh bắt đầu. Giải pháp một lớp lót là đảm bảo bạn đặt nền ban đầu trong TextBlock để bắt đầu và thực hiện điều này thông qua {DynamicResource} không đảm bảo cho bạn.

Các vấn đề liên quan