2017-12-18 21 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を中にエラーが発生していますプロパティ名= 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: '' [不明]」プロパティが '(0)(1)[3](2)。。' パス内のDependencyObjectを指していません。

答えて

0

データ・トリガーは、バインディングの値が指定した値と等しい場合にトリガーします。しかし、あなたは値を指定しませんでした。あなたは「火」にトリガーをしたい場合はtrueにPanelOpenedの値が変化するが、そう言うとき:

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

thx、今私は別の問題に直面しました –

+0

質問に壊れたものではなく、実際のXAMLを投稿してください。私はそれをテストするためにそれを修正しなければならなかった。 –

0

事は、私が代わりに境界線のグリッドスタイルにDataTriggerを追加しようとしましたです。作業バージョン:

  <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

意味があります。それが私がテストのために変更したものです。 –

関連する問題