2011-04-14 2 views
9

WPF 페이지가 있습니다. 페이지에는 몇 가지 내용이 있지만 페이지의 루트 레이아웃의 마지막 하위 구성 요소는 내가 만든 사용자 정의 컨트롤입니다. 그것은 다음과 같다 : 기본적WPF : 트리거 속성 속성 내에서 다른 컨트롤을 참조하는 방법?

<UserControl DataContext=UserControlViewModel> 
    <UserControl.Resources> 
    <BooleanToVisibilityConverter x:Key="visibilityConverter" /> 
    </UserControl.Resources> 
    <Grid 
     Name="grid" 
     Visibility="{Binding IsOn, Converter={StaticResource visibilityConverter}}"> 
    <!-- Border to dim everything behind my user control --> 
    <Border Background="#000000" Opacity="0.4" /> 
    <!-- The following border is red and holds the content --> 
    <Border 
     Width="{Binding ElementName=txt, Path=ActualWidth}" 
     Height="{Binding ElementName=txt, Path=ActualHeight}" 
     Margin="{Binding ElementName=txt, Path=Margin}" 
     HorizontalAlignment="{Binding ElementName=txt, Path=HorizontalAlignment}" 
     VerticalAlignment="{Binding ElementName=txt, Path=VerticalAlignment}" 
     Background="Red"> 
     <TextBlock 
      Name="txt" 
      Width="200" 
      Height="100" 
      Margin="20" 
      HorizontalAlignment="Center" 
      VerticalAlignment="Center" 
      Text="This is my super awesome message!" /> 
    </Border> 
    </Grid> 
</UserControl> 

가 상기 UserControlViewModel 객체의 속성 IsOn, false으로 설정, 즉 사용자 제어가 보이지된다. 이 속성을 true으로 변경하는 로직을 구현 한 다음 흐리게 표시되는 다른 모든 구성 요소 앞에 사용자 정의 컨트롤이 표시됩니다. 이것은 잘 작동합니다.

이제 사용자 정의 컨트롤 뒤에 표시되는 구성 요소를 흐리게 표시하는 페이드 효과 애니메이션을 만들려고합니다. 다음으로 왼쪽에서부터 페이드 인 할 내용을 담고있는 붉은 테두리를 만들고 싶습니다. 그래서 움직이기 + 퇴색합니다.

먼저 페이드 효과부터 시작해 보겠습니다.

<UserControl DataContext=UserControlViewModel> 
    <UserControl.Resources> 
    <BooleanToVisibilityConverter x:Key="visibilityConverter" /> 
    </UserControl.Resources> 
    <Grid 
     Name="grid" 
     Visibility="{Binding IsOn, Converter={StaticResource visibilityConverter}}"> 
    <!-- Border to dim everything behind my user control --> 
    <Border Background="#000000" Opacity="0.4"> 
     <!-- The following style is new code --> 
     <Border.Style> 
     <Style TargetType="Border"> 
      <Style.Triggers> 
      <Trigger Property="{Binding ElementName=grid, Visibility}" Value="Visible"> 
       <Trigger.EnterActions> 
       <BeginStoryboard> 
        <Storyboard> 
        <DoubleAnimation 
         Storyboard.TargetProperty="Opacity" 
         From="0.0" 
         To="0.4" 
         Duration="0:0:1" /> 
        </Storyboard> 
       </BeginStoryboard> 
       </Trigger.EnterActions> 
      </Trigger> 
      </Style.Triggers> 
     </Style> 
     </Border.Style> 
    </Border> 
    ... 

을하지만 문제가있다 : 나는 배경 구성 요소의 디밍을하도록되어 그 Border에이 스타일을 썼다는 종속성 속성이 아니기 때문에 내가 방아쇠 Property 구속력을 설정할 수 없습니다. gridVisibility 속성이 Visible으로 설정되면 트리거를 시작하는 방법이 필요합니다. 제발 도와주세요 고마워요!

두 번째 문제는 빨간색 테두리를 움직이는 방법을 모르므로 일부 규모 변환에 대한 도움이 필요합니다. 다시 한번 감사드립니다!

답변

15

시도 다음 줄을 교체 : 원래

:

<Trigger Property="{Binding ElementName=grid, Visibility}" Value="Visible"> 

교체 : 그것은 작동

<DataTrigger Binding={Binding Visibility, ElementName=grid} Value="Visibile"> 
+0

, 좋은! – Boris

+0

처음 만 작동합니다! 왜!? – Boris

+0

@myermian : 당신이 의미하는 바가 무엇인지 잘 모르겠습니다. 좀 더 문장으로 설명해 주시겠습니까? 감사. – Boris