2010-12-06 2 views
3

우리는 프리즘 기반 Silverlight 응용 프로그램을 작성 중이고 별도의 모듈로 전체 페이지를 보유하고 있습니다.두 개 (또는 그 이상)의 XAML 파일간에 VisualStateManager를 공유하려면 어떻게해야합니까?

public void Show() 
{ 
    VisualStateManager.GoToState(this, "ShowState", true); 
} 

public void Hide() 
{ 
    VisualStateManager.GoToState(this, "HideState", true); 
} 
순간 "ShowState"에서

과 :에서 탐색 할 때

페이지 사이의 전환은 탐색 이벤트를 통해 처리되며, 각 모듈에 탐색 할 때 페이지를 표시하고 숨길 구현, 다음의 메소드가 있습니다 "HideState"는 각 모듈의 XAML 파일에 정의되어 있으므로 너무 많이 중복됩니다. ... 각 천이에 대한 Storyboard를 나타내는

<Grid x:Name="LayoutRoot"> 
    <VisualStateManager.VisualStateGroups> 
     <VisualStateGroup x:Name="VisualStates"> 
      <VisualState x:Name="ShowState"> 
       ... 
      </VisualState> 
      <VisualState x:Name="HideState"> 
       ... 
      </VisualState> 
     </VisualStateGroup> 
    </VisualStateManager.VisualStateGroups> 

.

은 그냥 Storyboard 정의에서 오류를 발견 한 순간에 나는 모든 파일에 걸쳐 수정 프로그램을 복제해야 할거야. 각 파일에서 참조 할 수있는 Storyboard의 정의가 하나만있는 것이 더 좋습니다.

나는 올바른 구문에 대한 모든 아침을 검색했지만 그래서 무엇도 운이 없었 없습니다.

어떻게 우리의 모든 XAML 파일 사이의 VisualStateManager을 공유 할 수 있습니까?

+0

사용자 정의 컨트롤 내에 '동작'을 캡슐화하려는 것 같습니다. 그렇게하면 필요에 따라 컨트롤을 다시 사용하기 만하면 스토리 보드가 캡슐화되므로 문제가 발생할 때 문제를 해결할 수있는 단일 참조 지점을 제공합니다. 내 추측으로 이것은 Expander 또는 이와 유사한 것입니다; 해당 컨테이너 내의 모든 자식에게 공통된 기능을 제공합니다. –

답변

2
<Storyboard x:Key="ShowStoryboard"> 
    <DoubleAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="glow" Storyboard.TargetProperty="(UIElement.Opacity)"> 
     <SplineDoubleKeyFrame KeyTime="00:00:00.3000000" Value="0"/> 
    </DoubleAnimationUsingKeyFrames> 
</Storyboard> 

<VisualState x:Name="ShowState"> 
    <BeginStoryboard Storyboard="{StaticResource ShowStoryboard}"/> 
</VisualState> 

위에서 본 것처럼 스토리 보드를 XAML 내에서 참조 할 수 있습니다. 가장 큰 부분은 자원으로 어딘가에 저장되어있는 스토리 보드입니다. 그 후에는 VisualState에서 BeginStoryboard 참조를 사용할 수 있어야합니다.

편집 : 위는 WPF에서 가능하지만 SL에서는 가능하지 않습니다. 현재로서는 SL에서 Storyboard 또는 VisualState을 다시 사용할 수있는 능력이없는 것으로 보입니다. 사용자 지정 컨트롤에 적용된 스타일 내에서 VisualStateManager 동작을 캡슐화하여 수행하려는 작업을 계속 수행 할 수 있어야합니다. 이렇게하면 찾고있는 단일 실패 지점이 제공됩니다.

+0

전체 VisualStateManager를 참조하고 싶지만 한 곳에서 'Storyboard' 정의를 사용하고 싶습니다.) – ChrisF

+1

이것은 작동하지 않습니다. 'BeginStoryboard'는 유효한 XAML로 인식되지 않고''할 경우 초기화시 오류가 발생합니다. – ChrisF

+0

@ChrisF BeginStoryboard는 실제로 SL 내에서 활성화되어 있습니다. 그러나 그것은 트리거 내에서 아마도 (이 WPF에)는 VisualState 허용되지 내에서 제한 소용이 있고, 제가 –

관련 문제