C4p*_*1nZ 12 c# wpf animation user-controls dependency-properties
我想一个动画Button的Background鼠标是否过Button.
该Button的Background必然,我在代码中创建的背后,一个自定义的依赖项属性我UserControl
... Background="{Binding BGColor, Elementname="QButton"}"
Run Code Online (Sandbox Code Playgroud)
现在,如果我尝试使用按钮的背景动画
<Trigger Property="IsMouseOver" Value="True">
<Trigger.EnterActions>
<BeginStoryboard>
<Storyboard>
<ColorAnimation To="LightBlue"
Duration="0:0:2"
Storyboard.TargetProperty="Background.Color"/>
</Storyboard>
</BeginStoryboard>
</Trigger.EnterActions>
</Trigger>
Run Code Online (Sandbox Code Playgroud)
我得到一个例外,说:
无法为不可变属性(或类似属性)设置动画.
我该如何解决这个问题?
基于Mike Hillberg的关于无法在不可变对象实例上对“...”进行动画处理的精彩文章:
\n\n\n\n\n作为解决方法,您可以更新绑定来为\n 制作画笔的副本
\nButton。这不会干扰绑定 \xe2\x80\x93 对窗口\xe2\x80\x99s 前景的任何更改仍将传播到Button\xe2\x80\x93,但 \nButton将制作自己的副本对于本地动画。
所以你的完整解决方案应该是这样的:
\n\n<Window x:Class="WpfApplication2.Window3"\n xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"\n xmlns:local="clr-namespace:WpfApplication1"\n ....\n ....\n\nBackground="{Binding BGColor, Converter={x:Static local:MyCloneConverter.Instance}}"\nRun Code Online (Sandbox Code Playgroud)\n\n它引用了一个IValueConverter绑定,如下所示:
class MyCloneConverter : IValueConverter\n{\n public static MyCloneConverter Instance = new MyCloneConverter();\n\n public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)\n {\n if (value is Freezable)\n {\n value = (value as Freezable).Clone();\n }\n return value;\n }\n\n public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)\n {\n throw new NotSupportedException();\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
218 次 |
| 最近记录: |