Silverlight에서 사용자 지정 종속성 속성에 애니메이션을 적용할 수 있나요?
-
09-06-2019 - |
문제
정말 분명한 것이 빠졌을 수도 있습니다.몇 가지 종속성 속성에 따라 내용이 배치되는 사용자 정의 패널을 작성하려고 합니다. 가지다 DP가 되는 것은 그들에게 애니메이션을 줄 수 있기를 원하기 때문입니다.)
그러나 이러한 두 속성에 애니메이션을 적용하기 위해 스토리보드를 실행하려고 하면 Silverlight에서 심각한 오류가 발생합니다.하지만 그중 하나만 애니메이션으로 만들면 제대로 작동합니다.그리고 내 속성 중 하나와 '내장' 속성(예: 불투명도)에 애니메이션을 적용하려고 하면 작동합니다.그러나 두 사용자 정의 속성을 모두 애니메이션화하려고 하면 치명적인 오류가 발생합니다.
다른 사람이 이것을 접했습니까?
편집하다:
두 개의 DP는 ScaleX와 ScaleY이며 둘 다 두 배입니다.패널에서 하위 항목의 X 및 Y 위치 크기를 조정합니다.그 중 하나가 정의되는 방법은 다음과 같습니다.
public double ScaleX
{
get { return (double)GetValue(ScaleXProperty); }
set { SetValue(ScaleXProperty, value); }
}
/// <summary>
/// Identifies the ScaleX dependency property.
/// </summary>
public static readonly DependencyProperty ScaleXProperty =
DependencyProperty.Register(
"ScaleX",
typeof(double),
typeof(MyPanel),
new PropertyMetadata(OnScaleXPropertyChanged));
/// <summary>
/// ScaleXProperty property changed handler.
/// </summary>
/// <param name="d">MyPanel that changed its ScaleX.</param>
/// <param name="e">DependencyPropertyChangedEventArgs.</param>
private static void OnScaleXPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
MyPanel _MyPanel = d as MyPanel;
if (_MyPanel != null)
{
_MyPanel.InvalidateArrange();
}
}
public static void SetScaleX(DependencyObject obj, double val)
{
obj.SetValue(ScaleXProperty, val);
}
public static double GetScaleX(DependencyObject obj)
{
return (double)obj.GetValue(ScaleXProperty);
}
편집하다:InvalidateArrange 호출을 사용하거나 사용하지 않고 시도했는데(어쨌든 반드시 필요함) 결과는 동일합니다.치명적인 오류가 시작되기 전에는 이벤트 핸들러가 호출되지도 않습니다.
해결책
Silverlight 2 Beta 2의 문서화된 버그입니다.동일한 개체에 대해 두 개의 사용자 지정 종속성 속성에 애니메이션을 적용할 수 없습니다.
다른 팁
OnPropertyChanged의 InvalidateArrange를 주석 처리하고 무슨 일이 일어나는지 살펴보겠습니다.
내 자신의 질문에 대답하는 것이 나쁜 형식이 아니기를 바랍니다.
Silverlight 2 릴리스 후보 0이 오늘 릴리스되었습니다. 이 문제를 테스트한 결과 수정된 것 같습니다.이제 테스트 패널의 두 Custom DP 모두 제대로 애니메이션화할 수 있으므로 앱이 예상대로 작동합니다.좋은데요.
이 RC는 개발자 기반 RC이므로 Silverlight의 표준 빌드는 업데이트되지 않았습니다.하지만 다음 달에는 완전히 출시될 것으로 예상됩니다.