WPF 动画:无法将 From 属性绑定到实际宽度



我正在尝试通过以下方式更改所选 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>

我被迫为动画指定"From"属性,因为我没有显式指定 TabItem 的"宽度"属性,它由自定义布局容器计算。但是当我尝试将动画的"From"属性绑定到 TabItem 的"ActualWidth"属性时,"System.Windows.Controls.TabItem"的初始化引发了异常。我试图将"触发器"部分移动到"控件模板"部分内,但没有效果。所以我有两个问题:

1)为什么"From"属性不能像我那样绑定到TabProject的实际宽度?

2) 我怎样才能达到预期的行为?

任何提示将不胜感激。

这无法完成,因为 WPF 框架将冻结最初用于动画的内容,因此,如果您尝试在可冻结对象上绑定,它不接受这一点。这就是为什么它被阻止更改并说,

无法冻结此情节提要时间线树以跨线程使用

相关内容

  • 没有找到相关文章

最新更新