在 WPF 中设置动画 - 在“System.Windows.Controls.ControlTemplate”的名称范围中找不到名称

Dan*_*iel 1 wpf styling

一直试图在更改选项卡时使用一些动画制作选项卡控件,但它一直让我感到悲伤并拒绝让我将动画放在任何有用的地方,除非它与控件本身位于同一个 XAML 窗口文件中(样式驻留在 DLL 文件中)来自其他样式的工作)。这是我的风格:

<Style x:Key="AnimatedTabControl" TargetType="{x:Type TabControl}">
    <Setter Property="SnapsToDevicePixels" Value="True" />
    <Setter Property="Background" Value="White" />
    <Setter Property="BorderThickness" Value="0" />
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type TabControl}">

                <Grid>
                    <Grid.RowDefinitions>
                        <RowDefinition Height="Auto" />
                        <RowDefinition Height="*" />
                    </Grid.RowDefinitions>
                    <Border>
                        <TabPanel
                                IsItemsHost="True">
                        </TabPanel>
                    </Border>
                    <Border BorderThickness="0"
                                Grid.Row="1"
                                BorderBrush="White"
                                Background="White">
                        <ContentPresenter x:Name="TabControlContent" ContentSource="SelectedContent" Margin="0" />
                    </Border>
                </Grid>
                <ControlTemplate.Resources>
                    <Storyboard x:Key="TabSelectionChangedStoryboard">
                        <DoubleAnimation Storyboard.TargetName="TabControlContent"
                         Storyboard.TargetProperty="Opacity"
                         To="100"
                         From="0"
                         FillBehavior="HoldEnd"
                         Duration="0:0:30.0" />
                    </Storyboard>
                </ControlTemplate.Resources>
                <ControlTemplate.Triggers>
                    <EventTrigger RoutedEvent="SelectionChanged">
                        <BeginStoryboard Storyboard="{StaticResource TabSelectionChangedStoryboard}" />
                    </EventTrigger>
                </ControlTemplate.Triggers>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>
Run Code Online (Sandbox Code Playgroud)

这导致在“System.Windows.Controls.ControlTemplate”的名称范围内找不到“TabControlContent”名称

我还尝试将动画移动到文件的开头,这导致了同样的错误。如果我把它放在样式之后,故事板就找不到它。有没有办法解决?

Dom*_*nas 5

解决方案:

使用Storyboard.Target而不是与Storyboard.TargetName结合使用{Binding ElementName=TabControlContent

代替

<DoubleAnimation 
    Storyboard.TargetName="TabControlContent"
    Storyboard.TargetProperty="Opacity"
    To="100"
    From="0"
    FillBehavior="HoldEnd"
    Duration="0:0:30.0" />
Run Code Online (Sandbox Code Playgroud)

<DoubleAnimation 
    Storyboard.Target="{Binding ElementName=TabControlContent}"
    Storyboard.TargetProperty="Opacity"
    To="100"
    From="0"
    FillBehavior="HoldEnd"
    Duration="0:0:30.0" />
Run Code Online (Sandbox Code Playgroud)