2009-06-02 4 views
3

주 창에서 스토리 보드 한 쌍으로 애니메이션을 내보내는 사용자 정의 컨트롤이 포함 된 간단한 WPF 응용 프로그램이 있습니다. 나는 사용자 콘트롤의 불투명도 인 scaletransform.scalex와 scaletransform.scaley에 애니메이션을 적용하여 팝업을 보이거나 보지 않게합니다. 처음 실행될 때를 제외하고는 멋져 보입니다. 애니메이션은 3/10 분의 1 초가 걸릴 것으로 예상됩니다. 테스트를 진행하는 동안이 값을 증가 시켰습니다. 난 애니메이션의 속성 값이 기본값으로 예상대로되지 않는 문제가 있는지 확인하기 위해 초 단위로 기본값을 설정해 보았습니다. 그것은 아무것도하지 않았다. 나는 심지어 내 기본 설정 값을 설정하는 데 도움이 될지를 알기 위해로드 된 창에서 내 "숨김"애니메이션을 명시 적으로 호출하지만 작동하지 않습니다. 애니메이션을 처음 실행시킬 때 런타임에서 수행하는 초기화가 있습니까? UI를 보여주기 전에 명시 적으로 초기화를 호출 할 수있는 방법이 있습니까? 증상은 컨트롤이 첫 번째 애니메이션으로 약 2/10 초까지 보이지 않는다는 것입니다. 때로는 더 길어지고 컨트롤이 완전히 애니메이션 된 후에 표시됩니다 (불투명도와 크기는 마침내 나타날 때 최종 값입니다).WPF 애니메이션을 처음 실행

+0

첫 번째 애니메이션이 시작될 때/어때요? 또한 설명 된 증상에서 불투명도가 다른 비율로 변할 수있는 것처럼 들리거나/스케일 변형 후 나타납니다. – rmoore

+0

첫 번째 애니메이션은 모든 애니메이션이 마우스 클릭으로 트리거되므로 트리거됩니다. 필요한 경우 처리 된 것으로 표시 할 수 있도록 코드 뒤에이 작업을 수행합니다. 불투명도는 다른 모든 애니메이션에서도 잘 작동합니다. 기본적으로 첫 번째 애니메이션과 다른 애니메이션 간의 코드에는 차이가 없습니다. WPF 런타임이 무언가를 최적화하면 (기본적으로 ScaleTransform과 Opacity에 의해 컨트롤이 숨겨 짐) 이것이 자동 메모리 최적화 또는 일부 비용을 지불하는 가격입니다. – Rich

+0

WPF 런타임에서 "아,이 컨트롤은 ScaleTransforms와 Opacity가 0이므로 배트에서 바로 볼 수 없습니다. 나중에 동적으로로드 해 봅시다"라고 기대하고있는 동안 catchup을 재생합니다. 스스로를 시야에 활력을 불어 넣는다. – Rich

답변

1

애니메이션 전에 UserControl의 DataContext를 설정하는 것처럼 들립니다. 아마도 시각적 인 객체를 만들고 애니메이션이 시작될 때 시각적 트리에 추가하는 바인딩 작업이 진행 중일 것입니다. 이것은 애니메이션이 싸우고있는 처리를 필요로합니다. 이것을 방지하는 방법은 컨트롤을 인스턴스화 (DataContext를 사용하여 설정)하지만 숨김으로하므로 시각적 개체 생성을 애니메이션시 수행 할 필요가 없습니다. (동료 Tim Lee를 통해)

+0

좋아요, 당신은 절대적으로 옳았습니다 ... 그리고 이것은 나의 초기 직감이었습니다. 그러나 런타임은 자신의 이익을 위해 너무 똑똑해 지려고합니다. 보기 (불투명도, 음수 여백, scaletransform, translatetransform)에서 어떤 방식 으로든 숨기려면 어떤 방법을 시도해도 똑같습니다. 볼 수 있도록 허용하는 경우 DataContext를 먼저 설정할 필요가 없습니다. 첫 번째 애니메이션은 부드럽게 진행됩니다. 마치 런타임이 실제로 볼 때 볼 수 있다고 생각하도록 런타임을 속일 필요가있는 것과 거의 같습니다. 즉, 또는 명시 적으로 시각적 트리를 작성하는 방법을 알아야합니다. 후자는 덜 해킹을 느낀다. – Rich

+0

이 스레드는 고대이지만,이 문제를 어떻게 해결 했습니까? 각 컨트롤을 1 너비로 설정해도 도움이되지 않습니다. 저는 WPF에 비교적 익숙하지 않아 여기에 줄을 숨기지 않았습니다. – Harti

관련 문제