& # 39;前景# 39;属性没有指向路径'(前景).(0)'中的DependencyObject

本文关键字:前景 DependencyObject 中的 属性 路径 | 更新日期: 2023-09-27 18:16:12

我有一个WPF画布项目,我从工具箱中拖放对象到画布上。根据某些数据,其中一些物体应该会闪烁或闪烁。我得到一个未处理的异常:不能在不可变对象实例上动画'(前景).(0)' ..以下是我的代码。有人建议使用(前景).(SolidColorBrush.Color),我在我的标记中改变了这一点,但似乎没有解决它。

<!-- DataTemplate for DesignerCanvas look and feel -->
<DataTemplate DataType="{x:Type viewModels:SingleValueControlViewModel}">
    <Grid>
        <Label Name="label" Content="{Binding TagValue}" IsHitTestVisible="False" Height="{Binding ItemHeight}" Width="{Binding ItemWidth}" 
          Background="{Binding BackColor}"     
          Foreground="{Binding ForeColor}"
          BorderBrush="{Binding BorderColor}"
          BorderThickness="{Binding StyleProperties.BorderWidth}"
          FontFamily="{Binding StyleProperties.Font.FontFamily}"
          FontSize = "{Binding StyleProperties.Font.Size}"
          FontStyle="{Binding StyleProperties.Font.Style}"
          HorizontalContentAlignment="{Binding TextAlign}" >
<Label.Style>
              <Style>
                  <Style.Triggers>
                      <DataTrigger Binding="{Binding StyleProperties.FlashEnable}" Value="true">
                          <Setter Property="Label.Background" Value="Black"></Setter>
                          <Setter Property="Label.Foreground" Value="Red"></Setter>
                          <DataTrigger.EnterActions>
                              <BeginStoryboard>
                                  <Storyboard RepeatBehavior="Forever">
                                        <ColorAnimation
                                          Storyboard.TargetProperty="(Foreground).(SolidColorBrush.Color)"
                                          Duration="00:00:00:01"
                                          From="Black" To="Red">
                                        </ColorAnimation>
                                  </Storyboard>
                              </BeginStoryboard>
                          </DataTrigger.EnterActions>
                      </DataTrigger>
                  </Style.Triggers>
              </Style>
          </Label.Style>
    </Grid>
</DataTemplate>

& # 39;前景# 39;属性没有指向路径'(前景).(0)'中的DependencyObject

/*检查用户代码后的最终答案*/

添加到你的DiagramControl.xaml

<DataTrigger Binding="{Binding IsSelected}" Value="True">                                                         
    <Setter Property="Opacity" Value="1"/>
    <DataTrigger.EnterActions>
         <BeginStoryboard>
            <Storyboard RepeatBehavior="Forever">
                 <DoubleAnimation Storyboard.TargetProperty="Opacity" From="1" To=" 0.1" Duration="00:00:0.3"/>
            </Storyboard>
         </BeginStoryboard>
    </DataTrigger.EnterActions>                                                
</DataTrigger>

/*当用户仍然不能运行他的动画并报告评论中所说的错误时,进行更新*/

你必须绑定你的背景,前景属性,并记住画笔对象是不可变的。有如下msdn链接所述的解决方案:

不可变实例动画错误

调试动画

/*用户更新问题后的新答案*/

我已经使用了你的代码,因为它就像下面的一个添加TargetType="Label",它是完美的工作。我使用了我自己的StyleProperties。FlashEnable绑定可以让你的datattrigger工作。

这是一边。另一方面:当您将项目拖拽到画布时,您正在动态地执行所有这些操作。为此,你需要在代码中应用你的样式/触发器。

<Grid>
<Label Content="Hi ! I am added dynamically" TextBlock.FontSize="45">
  <Label.Style>
    <Style TargetType="Label">
      <Style.Triggers>
        <DataTrigger Binding="{Binding StyleProperties.FlashEnable, Mode=OneWay}" Value="true">
         <Setter Property="Label.Background" Value="Black"></Setter>
         <Setter Property="Label.Foreground" Value="Red"></Setter>
         <DataTrigger.EnterActions>
            <BeginStoryboard>
               <Storyboard RepeatBehavior="Forever">
                 <ColorAnimation 
                     Storyboard.TargetProperty="(Foreground).(SolidColorBrush.Color)"
                     Duration="00:00:00:01"
                     From="Black" To="Red">
                  </ColorAnimation>
                </Storyboard>
             </BeginStoryboard>
          </DataTrigger.EnterActions>
      </DataTrigger>                        
      </Style.Triggers>
   </Style>
  </Label.Style>
</Label>
</Grid>

/*在用户更新问题之前发布的旧答案*/要显示你的对象闪烁,你必须改变它们的前景属性。这个前景色肯定来自某个变量。对于绑定,你必须使用依赖属性,或者包含属性/变量的类必须实现INotifyPropertyChanged,这样你的属性就会引发PropertyChanged事件。

你也应该提供一些初始值的前景,如果你使用动画。

您也可以使用DynamicResource而不是StaticResource。

如果你发布一些XAML,可以说得更多。

这个适合我:

<Style TargetType="Label">
    <Style.Triggers>
        <DataTrigger Binding="{Binding FlashEnable}" Value="True">
            <Setter Property="Background" Value="Black"/>
            <Setter Property="Foreground" Value="Red"/>
            <DataTrigger.EnterActions>
                <BeginStoryboard>
                    <Storyboard RepeatBehavior="Forever">
                        <ColorAnimation
                            Storyboard.TargetProperty="Foreground.Color"
                            Duration="0:0:1" From="Black" To="Red">
                        </ColorAnimation>
                    </Storyboard>
                </BeginStoryboard>
            </DataTrigger.EnterActions>
        </DataTrigger>
    </Style.Triggers>
</Style>

你也可以显式地在前景属性的样式设置器中设置一个SolidColorBrush:

<Style TargetType="Label">
    <Style.Triggers>
        <DataTrigger Binding="{Binding FlashEnable}" Value="True">
            <Setter Property="Background" Value="Black"/>
                <Setter Property="Foreground">
                    <Setter.Value>
                        <SolidColorBrush Color="Red"/>
                    </Setter.Value>
                </Setter>
            <DataTrigger.EnterActions>
                <BeginStoryboard>
                    <Storyboard RepeatBehavior="Forever">
                        <ColorAnimation
                            Storyboard.TargetProperty="Foreground.Color"
                            Duration="0:0:1" From="Black" To="Red">
                        </ColorAnimation>
                    </Storyboard>
                </BeginStoryboard>
            </DataTrigger.EnterActions>
        </DataTrigger>
    </Style.Triggers>
</Style>