2017-12-18 26 views
0

4 일 동안 작동하도록 노력하고 있습니다. 제발 도와주세요.DataTrigger 및 Storyboard에 문제가 있습니다.

나는 스토리 보드를 가지고 있었고 트리거 동작을 버튼 클릭에서 부울 변수에 바인딩으로 변경할 때까지 모든 것이 잘되었습니다. 모두 템플릿으로 작성되어있어 작업이 더욱 복잡해졌습니다. 코드이었다 (그리고 그것은 여전히 ​​작동) :

<Border x:Name="panelControl" Grid.RowSpan="4" Margin="0,0,-450,0" VerticalAlignment="Stretch" HorizontalAlignment="Right" RenderTransformOrigin="0.5,0.5" Width="450" Height="275" DataContext="{Binding CurrentPanelViewModel}" > 
      <Border.RenderTransform> 
       <TransformGroup> 
        <ScaleTransform/> 
        <SkewTransform/> 
        <RotateTransform/> 
        <TranslateTransform/> 
       </TransformGroup> 
      </Border.RenderTransform> 

       <Canvas Background="#FFC6E8E6"> 
        ... 
       </Canvas> 
      </Grid> 
     </Border> 

    <Grid.Triggers> 
      <EventTrigger RoutedEvent="Button.Click" SourceName="AddButton2"> 
       <BeginStoryboard Name="StartStoryboard"> 
        <Storyboard SpeedRatio="12" TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[3].(TranslateTransform.X)"> 
         <DoubleAnimation 
          Storyboard.TargetName="panelControl" 
          Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[3].(TranslateTransform.X)" 
          Duration="0:0:005" From="0" To="-700" /> 
        </Storyboard> 
       </BeginStoryboard> 
      </EventTrigger> 

지금 내가 썼다.

<Border x:Name="panelControl" Grid.RowSpan="4" Margin="0,0,-450,0" VerticalAlignment="Stretch" HorizontalAlignment="Right" RenderTransformOrigin="0.5,0.5" Width="450" Height="275" DataContext="{Binding Path=Controller.LegViewModel.CurrentPanelViewModel}" > 
      <Border.RenderTransform> 
       <TransformGroup> 
        <ScaleTransform/> 
        <SkewTransform/> 
        <RotateTransform/> 
        <TranslateTransform/> 
       </TransformGroup> 
      </Border.RenderTransform> 

      <Grid.Style> 
        <Style> 
         <Style.Triggers> 
          <DataTrigger Binding="{Binding Path = PanelOpened}"> 
           <DataTrigger.EnterActions> 
            <BeginStoryboard > 
             <Storyboard SpeedRatio="12" TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[3].(TranslateTransform.X)"> 
              <DoubleAnimation 
               Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[3].(TranslateTransform.X)" 
               Duration="0:0:005" From="0" To="-700" /> 
             </Storyboard> 
            </BeginStoryboard> 
           </DataTrigger.EnterActions> 

           <!--<DataTrigger.ExitActions> 
            you could animate close too if you wanted 
           </DataTrigger.ExitActions>--> 
          </DataTrigger> 
         </Style.Triggers> 
        </Style> 
       </Grid.Style> 

       <Canvas Background="#FFC6E8E6"> 
        .... 
       </Canvas> 
      </Grid> 
     </Border> 

아무 것도 발생하지 않습니다. 사실에도 불구하고 PanelOpened가 알림을 확인했습니다.

---------- UPDATE -----------

나는 DataTrigger에 값 = "true"로 추가 지금은 (때 내 OnPropertyChanged를에 오류가 propertyName 형식 = PanelOpened)

public event PropertyChangedEventHandler PropertyChanged; 
    protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null) 
    { 
     //если PropertyChanged не нулевое - оно будет разбужено 
     PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); 
    } 

    public bool PanelOpened 
    { 
     get { return _panelOpened; } 
     set 
     { 
      _panelOpened = value; 
      OnPropertyChanged(); 
     } 
    } 

오류 : System.InvalidOperationException : '[알] 경로에 DependencyObject에 가리 키지 않는 속성 ".. (0) (1) [3] (2)' . '

답변

0

바인딩의 값이 지정한 값과 같으면 datatrigger가 트리거됩니다. 그러나 당신은 그 값을 지정하지 않았습니다.

<DataTrigger Binding="{Binding PanelOpened}" Value="True"> 
+0

xx 이제 다른 문제가 발생했습니다. –

+0

질문에 깨진 내용이 아닌 실제 XAML을 게시하십시오. 나는 그것을 시험하기 위해 고쳐야 만했다. –

0

것은 내가 대신 국경의 그리드 스타일에 DataTrigger를 추가하려고입니다 : true로 PanelOpened 값이 변경, 그래서 말할 때 당신은 "불"에 방아쇠를합니다. 작업 버전 :

  <Border.Style> 
       <Style TargetType="{x:Type Border}"> 
        <Style.Triggers> 
         <DataTrigger Binding="{Binding Path = PanelOpened}" Value="True"> 
          <DataTrigger.EnterActions> 
           <BeginStoryboard > 
            <Storyboard SpeedRatio="12" TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[3].(TranslateTransform.X)"> 
             <DoubleAnimation 
              Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[3].(TranslateTransform.X)" 
              Duration="0:0:005" From="0" To="-700" /> 
            </Storyboard> 
           </BeginStoryboard> 
          </DataTrigger.EnterActions> 
         </DataTrigger> 
        </Style.Triggers> 
       </Style> 
      </Border.Style> 
+0

의미가 있습니다. 그것이 테스트를 위해 변경 한 것입니다. –