2016-02-08 55 views
0

您知道为什么下面的XAML无法正常工作吗?它看起来像一个元素不能有多个DataTrigger。 DataTrigger中的那些Storyboard,正如你所看到的,它们是在点击按钮时执行的。 最终的原因是,在点击一个按钮时,一个网格应该向上滑动,另一个向下滑动,从而获得某种类型的手风琴动画。由于WPF多于一个DataTrigger

  <StackPanel Grid.Row="7" Grid.Column="0" Grid.ColumnSpan="2" Margin="0,10,0,0"> 
 
       <!--Add New Banner Grid--> 
 
       <!--<Grid DockPanel.Dock="Top" Background="#FFE0FFD2" Height="50">--> 
 
       <Grid x:Name="grdAddBunner"> 
 
        <Grid.Style> 
 
         <Style TargetType="Grid"> 
 
          <Setter Property="Height" Value="50"></Setter> 
 
          <Setter Property="Background" Value="#FFE0FFD2"></Setter> 
 
          <Style.Triggers> 
 

 
           <DataTrigger Binding="{Binding ElementName=btnEditBunner, Path=IsPressed}" Value="True"> 
 
            <DataTrigger.EnterActions> 
 
             <BeginStoryboard> 
 
              <Storyboard> 
 
               <DoubleAnimation Storyboard.TargetProperty="Height" From="150" To="0" Duration="0:0:0.5"></DoubleAnimation> 
 
              </Storyboard> 
 
             </BeginStoryboard> 
 
            </DataTrigger.EnterActions> 
 
           </DataTrigger> 
 

 
           <DataTrigger Binding="{Binding ElementName=btnAddBunner, Path=IsPressed}" Value="True"> 
 
            <DataTrigger.EnterActions> 
 
             <BeginStoryboard> 
 
              <Storyboard> 
 
               <DoubleAnimation Storyboard.TargetProperty="Height" From="0" To="150" Duration="0:0:0.5"></DoubleAnimation> 
 
              </Storyboard> 
 
             </BeginStoryboard> 
 
            </DataTrigger.EnterActions> 
 
           </DataTrigger> 
 

 
          </Style.Triggers> 
 
         </Style> 
 
        </Grid.Style> 
 
        <Grid> 
 
         <Grid.RowDefinitions> 
 
          <RowDefinition Height="30"></RowDefinition> 
 
          <RowDefinition Height="30"></RowDefinition> 
 
          <RowDefinition Height="30"></RowDefinition> 
 
          <RowDefinition Height="30"></RowDefinition> 
 
         </Grid.RowDefinitions> 
 
         <Grid.ColumnDefinitions> 
 
          <ColumnDefinition></ColumnDefinition> 
 
          <ColumnDefinition></ColumnDefinition> 
 
          <ColumnDefinition></ColumnDefinition> 
 
         </Grid.ColumnDefinitions> 
 
         <Label Grid.Row="0" Grid.Column="0" Grid.ColumnSpan="3" Content="Add New Banner" HorizontalAlignment="Center" Foreground="DarkGreen" FontWeight="Bold"></Label> 
 
         <Label Grid.Row="1" Grid.Column="0" HorizontalAlignment="Right" Content="Fund"></Label> 
 
         <telerik:RadComboBox Grid.Row="1" Grid.Column="1" telerik:StyleManager.Theme="Windows8" Margin="3" ItemsSource="{Binding LstFund}"></telerik:RadComboBox> 
 
         <Label Grid.Row="2" Grid.Column="0" HorizontalAlignment="Right" Content="Banner"></Label> 
 
         <TextBox Grid.Row="2" Grid.Column="1" Grid.ColumnSpan="2" telerik:StyleManager.Theme="Windows8" Margin="3" Text="{Binding AddBannerName}"></TextBox> 
 
         <Button Grid.Row="3" Grid.Column="1" Content="Save" Command="{Binding AddBannerCmd}" Height="25" Width="80" HorizontalAlignment="Left"></Button> 
 
         <Button Grid.Row="3" Grid.Column="2" Content="Calcel" Height="25" Width="80" HorizontalAlignment="Right"></Button> 
 
        </Grid> 
 
       </Grid> 
 

 
       <!--Edit Existing Banner Grid--> 
 
       <!--<Grid DockPanel.Dock="Top" Background="#FFFFF7D2" Height="50">--> 
 
        <Grid x:Name="grdEditBanner"> 
 
        <Grid.Style> 
 
         <Style TargetType="Grid"> 
 
          <Setter Property="Height" Value="50"></Setter> 
 
          <Setter Property="Background" Value="#FFFFF7D2"></Setter> 
 
          <Style.Triggers> 
 
           
 

 
           <DataTrigger Binding="{Binding ElementName=btnAddBunner, Path=IsPressed}" Value="True"> 
 
            <DataTrigger.EnterActions> 
 
             <BeginStoryboard> 
 
              <Storyboard> 
 
               <DoubleAnimation Storyboard.TargetProperty="Height" From="150" To="0" Duration="0:0:0.5"></DoubleAnimation> 
 
              </Storyboard> 
 
             </BeginStoryboard> 
 
            </DataTrigger.EnterActions> 
 
           </DataTrigger> 
 

 
           <DataTrigger Binding="{Binding ElementName=btnEditBunner, Path=IsPressed}" Value="True"> 
 
            <DataTrigger.EnterActions> 
 
             <BeginStoryboard> 
 
              <Storyboard> 
 
               <DoubleAnimation Storyboard.TargetProperty="Height" From="0" To="150" Duration="0:0:0.5"></DoubleAnimation> 
 
              </Storyboard> 
 
             </BeginStoryboard> 
 
            </DataTrigger.EnterActions> 
 
           </DataTrigger> 
 

 
          </Style.Triggers> 
 
         </Style> 
 
        </Grid.Style> 
 
        <Grid> 
 
         <Grid.RowDefinitions> 
 
          <RowDefinition Height="30"></RowDefinition> 
 
          <RowDefinition Height="30"></RowDefinition> 
 
          <RowDefinition Height="30"></RowDefinition> 
 
          <RowDefinition Height="30"></RowDefinition> 
 
         </Grid.RowDefinitions> 
 
         <Grid.ColumnDefinitions> 
 
          <ColumnDefinition></ColumnDefinition> 
 
          <ColumnDefinition></ColumnDefinition> 
 
          <ColumnDefinition></ColumnDefinition> 
 
         </Grid.ColumnDefinitions> 
 
         <Label Grid.Row="0" Grid.Column="0" Grid.ColumnSpan="3" Content="Edit Existing Banner" HorizontalAlignment="Center" Foreground="#FF5B6400" FontWeight="Bold"></Label> 
 
         <Label Grid.Row="1" Grid.Column="0" HorizontalAlignment="Right" Content="Fund"></Label> 
 
         <telerik:RadComboBox Grid.Row="1" Grid.Column="1" telerik:StyleManager.Theme="Windows8" Margin="3" ItemsSource="{Binding LstFund}" SelectedItem="{Binding SelectedBannerFund}"></telerik:RadComboBox> 
 
         <Label Grid.Row="2" Grid.Column="0" HorizontalAlignment="Right" Content="Banner"></Label> 
 
         <TextBox Grid.Row="2" Grid.Column="1" Grid.ColumnSpan="2" telerik:StyleManager.Theme="Windows8" Margin="3" Text="{Binding SelectedBannerName}"></TextBox> 
 
         <Button Grid.Row="3" Grid.Column="1" Content="Save" Command="{Binding UpdateBannerCmd}" Height="25" Width="80" HorizontalAlignment="Left"></Button> 
 
         <Button Grid.Row="3" Grid.Column="2" Content="Calcel" Height="25" Width="80" HorizontalAlignment="Right"></Button> 
 
        </Grid> 
 
       </Grid> 
 
      </StackPanel>

+0

其实DataTriggers在这里很好。我刚刚注意到Height属性没有被保存,在按钮释放后,高度正在恢复到原始值。 – lucas

+0

“IsPressed”可让您知道按钮何时处于“活动状态”,当您释放按钮时,此按钮会再次发生变化。所以这只会被设置为真,而你按下按钮。 – Edd

回答

1

的“IsPressed”让你知道当按钮是“活动”时再松开按钮这改变。

您是否试过将此操作移动到按钮上的命令绑定上,并在您的viewModel上设置了这些网格可用于设置自己样式的属性?

+0

是的,它可以这样工作。好建议。有没有办法用DataTrigger捕获'IsClicked'而不是'IsPressed'? – lucas

+1

是的,那将是一个“事件触发器”。我希望这有帮助。 – Edd