ImageFader라는 사용자 지정 컨트롤을 만들고 있습니다. 스타일 템플릿은 다음과 같습니다문제 후킹 제어 템플릿 리소스의 스토리 보드 이벤트가 완료되었습니다.
private void FadeImageStoryboard_Completed(object sender, EventArgs e)
{
SourceImage.Source = TargetImage.Source;
SourceImage.Opacity = 1;
TargetImage.Opacity = 0;
}
: 완성 된 핸들러에서
public override void OnApplyTemplate()
{
base.OnApplyTemplate();
SourceImage = Template.FindName("PART_SourceImage", this) as Image;
TargetImage = Template.FindName("PART_TargetImage", this) as Image;
FadeImageStoryboard = Template.Resources["FadeImageStoryboard"] as Storyboard;
FadeImageStoryboard.Completed += new EventHandler(FadeImageStoryboard_Completed);
}
나는 이미지를 교체하고 투명도를 재설정하기 위해 노력하고있어 :
코드에서<ControlTemplate TargetType="{x:Type controls:ImageFader}">
<Grid>
<Image HorizontalAlignment="Stretch" VerticalAlignment="Stretch"
Stretch="{TemplateBinding Stretch}"
x:Name="PART_SourceImage" Opacity="1" />
<Image HorizontalAlignment="Stretch" VerticalAlignment="Stretch"
Stretch="{TemplateBinding Stretch}"
x:Name="PART_TargetImage" Opacity="0" />
</Grid>
<ControlTemplate.Resources>
<Storyboard x:Key="FadeImageStoryboard">
<!-- fade in the new image -->
<DoubleAnimation From="0" To="1"
Duration="{TemplateBinding FadeTime}"
Storyboard.TargetName="PART_TargetImage"
Storyboard.TargetProperty="Opacity" />
<!-- fade out the previous image -->
<DoubleAnimation From="1" To="0"
Duration="{TemplateBinding FadeTime}"
Storyboard.TargetName="PART_SourceImage"
Storyboard.TargetProperty="Opacity" />
</Storyboard>
</ControlTemplate.Resources>
</ControlTemplate>
, 나는이 있습니다
FadeImageStoryboard.Begin(this, this.Template, true);
01 :
는 I 이것을 이용한 DispatchTimer 내부의 애니메이션을 시작
두 개 이상의 ImageFader 컨트롤을 동일한 윈도우에 배치해야만 모든 것이 잘 작동합니다. DispatchTimer를 사용하여 다른 간격으로 애니메이션을 시작하면 스토리 보드 완료 이벤트가 두 ImageFaders에서 실행됩니다.
저는 컨트롤이 정적 참조로 템플릿 리소스에서 스토리 보드를 가져오고 있다고 생각합니다.
어떻게해야합니까?
코드 뒤에서 스토리 보드를 만들려고 시도 했습니까? 컨트롤의 모든 인스턴스가 동일한 리소스를 사용하고있는 것처럼 들립니다. – Tejs
나는 그렇게하지 못했다. 그러나 가능하다면 나는 그것을 피하고 싶다. XAML을 좋아하고 코드에서 스토리 보드를 만드는 것은보기 흉한 것처럼 보입니다. – mbursill