0
我有一個自定義的ListBox與以下ListBoxItem樣式。它包含一些動畫,當鼠標懸停在它上面時可以縮放ListBoxItem。WPF InvalidateMeasure在動畫過程中或動畫後未被調用
<Style x:Key="notesListBoxStyle" TargetType="{x:Type ListBoxItem}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type ListBoxItem}">
<Grid x:Name="gridItem"
Background="LemonChiffon"
Height="100"
Width="100"
RenderTransformOrigin="{TemplateBinding RenderTransformOrigin}">
<Grid.RenderTransform>
<ScaleTransform ScaleX="1.0"
ScaleY="1.0"/>
</Grid.RenderTransform>
<Grid.LayoutTransform>
<RotateTransform Angle="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type ListBoxItem}, AncestorLevel=1}, Converter={StaticResource listIndexConverter}, ConverterParameter='Rotate'}"/>
</Grid.LayoutTransform>
<Border BorderBrush="DarkGoldenrod" BorderThickness="2" Margin="2">
<ContentPresenter HorizontalAlignment="Stretch"
SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"
VerticalAlignment="Stretch"/>
</Border>
</Grid>
<ControlTemplate.Triggers>
<EventTrigger RoutedEvent="ListBoxItem.MouseEnter">
<BeginStoryboard Name="showItemStoryboard">
<Storyboard >
<DoubleAnimation Storyboard.TargetName="gridItem"
Storyboard.TargetProperty="RenderTransform.ScaleX"
From="1.0"
To="1.5"
Duration="0:0:0.3"/>
<DoubleAnimation Storyboard.TargetName="gridItem"
Storyboard.TargetProperty="RenderTransform.ScaleY"
From="1.0"
To="1.5"
Duration="0:0:0.3"/>
<DoubleAnimation Storyboard.TargetName="gridItem"
Storyboard.TargetProperty="Width"
From="100"
To="400"
Duration="0:0:0.3"/>
<DoubleAnimation Storyboard.TargetName="gridItem"
Storyboard.TargetProperty="Height"
From="100"
To="200"
Duration="0:0:0.3"/>
<DoubleAnimation Storyboard.TargetName="gridItem"
Storyboard.TargetProperty="LayoutTransform.Angle"
To="0"
Duration="0:0:0.3"/>
</Storyboard>
</BeginStoryboard>
</EventTrigger>
<EventTrigger RoutedEvent="ListBoxItem.MouseLeave">
<StopStoryboard BeginStoryboardName="showItemStoryboard"/>
</EventTrigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
我有我自己的實現的MeasureOverride爲我的列表框都會調用,一切都很好,除了ListBoxItem中被縮放之前的MeasureOverride不叫,所以它要求比所需的尺寸要小得多。
我已經嘗試在動畫完成後調用ListBox上的InvalidateMeasure,但未觸發MeasureOverride方法。目前我正在ControlTemplate中的網格上應用動畫,這是什麼導致MeasureOverride不被調用?我如何在控件本身上應用相同的動畫?