C# 获取动画属性ChangedCallback中的窗口实际宽度时出错
我想创建DoubleAnimation的“自定义到依赖项”属性。它会将To属性设置为容器窗口的当前宽度减去该值。 其用途如下:C# 获取动画属性ChangedCallback中的窗口实际宽度时出错,c#,wpf,custom-controls,dependency-properties,propertychanged,C#,Wpf,Custom Controls,Dependency Properties,Propertychanged,我想创建DoubleAnimation的“自定义到依赖项”属性。它会将To属性设置为容器窗口的当前宽度减去该值。 其用途如下: <local:SpecialDoubleAnimation Storyboard.TargetProperty="Width" From="0" SpecialTo="50" Duration="0:0:3"></local:SpecialDoubleAnimation> 如您所见,OnChangeCallback事件调用非静态方法DoChan
<local:SpecialDoubleAnimation Storyboard.TargetProperty="Width" From="0" SpecialTo="50" Duration="0:0:3"></local:SpecialDoubleAnimation>
如您所见,OnChangeCallback事件调用非静态方法DoChangeCallback,以更改DoubleAnimation的to属性,通过调用window.GetWindowobj.ActualWidth获取当前窗口宽度
但是该代码在XAML代码的SpecialTo=50处抛出一个错误,错误是
对象引用未设置为对象的实例
我认为这是因为调用Window.GetWindowobj.ActualWidth,因为如果我删除它,错误就会消失
我该如何实现这一点?是否有其他方法可以获取PropertyChangeCallback上的实际窗口大小
谢谢。是否尝试添加类似ifWindow.GetWindowobj的内容=空…?谢谢@Bizz,但尽管错误已经消失,它似乎总是空的,你知道为什么吗?有没有办法让它工作?另一种解决方案:使用标准的DoubleAnimation并将其“到”属性绑定到窗口的实际宽度。使用减去偏移值的绑定转换器。转换器可能会将偏移量作为参数。请阅读本文:我怀疑动画是否添加到任何逻辑树中。这也是GetWindow总是返回null的原因。
public class SpecialDoubleAnimation : DoubleAnimation
{
public static readonly DependencyProperty SpecialToProperty = DependencyProperty.Register("SpecialTo", typeof(double), typeof(SpecialDoubleAnimation),new FrameworkPropertyMetadata(OnChangeCallback));
public double SpecialTo
{
get
{
return (double)GetValue(SpecialToProperty);
}
set
{
SetValue(SpecialToProperty, value);
}
}
private static void OnChangeCallback(DependencyObject obj, DependencyPropertyChangedEventArgs args)
{
((SpecialDoubleAnimation)obj).DoChangeCallback(Window.GetWindow(obj).ActualWidth, (double)args.NewValue);
}
private void DoChangeCallback(double windowWidth, double value)
{
To = windowWidth - value;
}
}