gpt4 book ai didi

wpf - 找不到在 ControlTemplate 中定义的资源

转载 作者:行者123 更新时间:2023-12-04 16:12:35 24 4
gpt4 key购买 nike

我有一个资源字典,其中包含我的窗口的样式。在这种风格中,我定义了模板,并在那里定义了很多东西。除其他外,我定义了一个 Storyboard来为模板中定义的某些事物制作动画。它看起来像这样:

<Style TargetType="local:MyWindow">
<Setter Property="Background" Value="red" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="local:MyWindow">
<Grid>
<Grid.Resources>
<Storyboard x:Key="MyAnimation">
<DoubleAnimation Storyboard.TargetName="ToBeAnimated" ... />
</Storyboard>
</Grid.Resources>
<Grid x:Name="ToBeAnimated" Background="Green"/>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>

现在我有一个 MyWindow 的实例(它确实应用了样式 :) )并且我想从窗口内触发动画。然而,这

this.FindResource("MyAnimation");

失败了!

如果我移动 Storyboard

<ControlTemplate.Resources/>

它能找到它,但如果我找到了

((Storyboard)FindResource("StoryboardOpenOverlay")).Begin();

我收到另一个错误,它找不到 ToBeAnimated...

有什么想法吗?

最佳答案

您可以在 Grid 上添加一个名称,并使用模板化部分获取对其的引用,为此:
- 添加 [TemplatePart(Name = "gridName",DataGrid.headerName, Type = typeof(Grid))] 在你的 MyWindow 类
- 并实现 OnApplyTemplate:

    protected override void OnApplyTemplate()
{
Grid grid = this.GetTemplateChild("gridName") as Grid;
if (grid != null)
{
Storyboard storyboard = grid.Resources["MyAnimation"] as Storyboard ;

}
base.OnApplyTemplate();
}

关于wpf - 找不到在 ControlTemplate 中定义的资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18785671/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com