我试图通过以下方式更改选定的TabItem的宽度:
<Style TargetType="{x:Type TabItem}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type TabItem}">
<Grid x:Name="Root">
<Border x:Name="Border" Background="{TemplateBinding Background}">
<ContentPresenter x:Name="ContentSite" VerticalAlignment="Center" HorizontalAlignment="Stretch" ContentSource="Header" Margin="12,2,12,2"/>
</Border>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
<Style.Triggers>
<Trigger Property="IsSelected" Value="True">
<Trigger.EnterActions>
<BeginStoryboard>
<Storyboard>
<DoubleAnimation Storyboard.TargetProperty="Width"
From="{Binding RelativeSource={RelativeSource AncestorType={x:Type TabItem}, Mode=FindAncestor}, Path=ActualWidth}"
To="200"
Duration="0:0:1"/>
</Storyboard>
</BeginStoryboard>
</Trigger.EnterActions>
</Trigger>
</Style.Triggers>
</Style>
我被迫指定&#34; From&#34;动画的属性,因为我没有指定&#34;宽度&#34; TabItem的属性是显式的,它由自定义布局容器计算。 但当我试图绑定&#34;来自&#34;动画的属性为&#34; ActualWidth&#34; TabItem的属性,System.Windows.Controls.TabItem&#39;的初始化。抛出一个例外。我试图移动&#34; Triggers&#34; &#34; ControlTemplate&#34;部分,但没有效果。所以我有两个问题:
1)为什么&#34; From&#34;属性以我的方式绑定到TabItem的ActualWidth?
2)我怎样才能达到预期的行为?
任何提示都将不胜感激。
答案 0 :(得分:0)
这是不可能的,因为WPF框架最初会冻结用于动画的东西,所以如果你试图在Freezable上绑定,它就会接受它。这就是为什么它无法改变并说,
无法冻结此Storyboard时间轴树以供跨线程使用