gpt4 book ai didi

c# - “前景”属性未指向路径 '(Foreground).(0)' 中的 DependencyObject

转载 作者:太空宇宙 更新时间:2023-11-03 12:59:04 32 4
gpt4 key购买 nike

我有一个 WPF Canvas 项目,我从工具箱中将对象拖放到 Canvas 上。根据某些数据,其中一些对象应该闪烁或闪烁。我得到一个未处理的异常:无法在不可变对象(immutable对象)实例上设置动画“(前景)。(0)”。以下是我的代码。有人建议使用 (Foreground).(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>

最佳答案

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

将此添加到您的 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>

/* 全新更新,因为用户仍然无法运行他的动画并报告评论中提到的错误*/

您必须绑定(bind)您的 Background、Foreground 属性,并记住 Brush 对象是不可变的。有一个解决方法,如以下 msdn 链接中所述:

immutable instance animation error

debugging animations

/* 用户使用当前 XAML 代码更新他的问题后发布的新答案 */

我已经使用了您的代码,如下所示,添加了一个 TargetType="Label",并且运行良好。我使用自己的 StyleProperties.FlashEnable 绑定(bind)来让您的 DataTrigger 工作。

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

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

/* 在用户更新他的问题之前发布的旧答案 */要显示您的对象闪烁,您必须更改其 Foreground 属性。而这个前景色一定来自某个变量。对于绑定(bind),您必须使用依赖属性,或者包含属性/变量的类必须实现 INotifyPropertyChanged,以便您的属性引发 PropertyChanged 事件。

如果您正在使用动画,您还应该为前景提供一些初始值。

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

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

关于c# - “前景”属性未指向路径 '(Foreground).(0)' 中的 DependencyObject,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32972937/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com