Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xaml 具有大小更改元素的动画问题_Xaml_Windows 8 - Fatal编程技术网

Xaml 具有大小更改元素的动画问题

Xaml 具有大小更改元素的动画问题,xaml,windows-8,Xaml,Windows 8,所以 我有一个列表视图,其中包含几个20像素规格的旗舰图像。当用户选择一个标志时,该标志需要“变大2倍”以表明它已被选中。因此,我尝试了以下方法: 我在listview上编辑了SelectedUnfocused状态。 首先,我创建了一个scaletransform来缩放标志。但问题是缩放因子会使国旗与其相邻部分重叠。因此,我将容器的宽度设置为增加几个像素,以便它能够适应大小的变化,但这会导致快速选择更改时出现jagger。因此我认为这是由于listview中的stackpanel无法足够快地重新

所以

我有一个列表视图,其中包含几个20像素规格的旗舰图像。当用户选择一个标志时,该标志需要“变大2倍”以表明它已被选中。因此,我尝试了以下方法:

我在listview上编辑了SelectedUnfocused状态。 首先,我创建了一个scaletransform来缩放标志。但问题是缩放因子会使国旗与其相邻部分重叠。因此,我将容器的宽度设置为增加几个像素,以便它能够适应大小的变化,但这会导致快速选择更改时出现jagger。因此我认为这是由于listview中的stackpanel无法足够快地重新测量和布局容器造成的。我创建了一个sizechanged事件以使其无效并重新布局,但没有成功。在动画中,我可以尝试强制itemspanel不断地重新测量什么

这一行为的录像

请注意,图像的大小会增加,并与相邻图像重叠。只有在动画完成后,它们才会重新布局

<VisualState x:Name="SelectedUnfocused">
     <Storyboard>
          <DoubleAnimation Duration="0" To="1" Storyboard.TargetProperty="Opacity" Storyboard.TargetName="SelectionBackground"/>
          <DoubleAnimation Duration="0" To="1" Storyboard.TargetProperty="Opacity" Storyboard.TargetName="SelectedBorder"/>
          <DoubleAnimation Duration="0" To="1" Storyboard.TargetProperty="Opacity" Storyboard.TargetName="SelectedCheckMark"/>
          <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Foreground" Storyboard.TargetName="contentPresenter">
               <DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource ListViewItemSelectedForegroundThemeBrush}"/>
          </ObjectAnimationUsingKeyFrames>
          <DoubleAnimationUsingKeyFrames EnableDependentAnimation="True" Storyboard.TargetProperty="(FrameworkElement.Height)" Storyboard.TargetName="OuterContainer">
               <EasingDoubleKeyFrame KeyTime="0" Value="108"/>
               <EasingDoubleKeyFrame KeyTime="0:0:0.3" Value="150"/>
          </DoubleAnimationUsingKeyFrames>
          <DoubleAnimationUsingKeyFrames EnableDependentAnimation="True" Storyboard.TargetProperty="(FrameworkElement.Width)" Storyboard.TargetName="OuterContainer">
               <EasingDoubleKeyFrame KeyTime="0" Value="100"/>
               <EasingDoubleKeyFrame KeyTime="0:0:0.3" Value="400"/>
           </DoubleAnimationUsingKeyFrames>
         </Storyboard>
    </VisualState>

我知道这不是传统的metro设计,但我遵循一个规范,在这个问题上添加一些相关的代码可能有助于得到答案。我将创建它的小版本,并简短地分享您是否将ScaleTransform分配给容器的LayoutTransform而不是RenderTransform?@Clemens:我将它放在RenderTransform然后尝试LayoutTransform。如果可以,可以设置ScaleTransform的ScaleX和ScaleY属性的动画。