gpt4 book ai didi

c# - 仅使用 XAML 从 WPF 中的父窗口控制 UserControl 的 Storyboard

转载 作者:太空狗 更新时间:2023-10-29 23:35:48 24 4
gpt4 key购买 nike

我创建了一个非常简单的测试应用程序来尝试解决同事向我描述的这个问题。他能够在 C# 中触发它,但我相信他需要更通用的解决方案,并希望它严格在 XAML 中完成。问题是:如何触发 UserControl 内的 Storyboard 以响应包含窗口中控件上的事件(父不必是 Window,它可以是 Page 或另一个 UserControl .. .为了简单起见,我使用了一个窗口)。因此,我最好的例子是您有一个带有按钮的窗口和一个 UserControl 实例。您希望 Button 的 Click 事件触发 UserControl 内的 Storyboard 开始。

在 UserControl 本身内部, Storyboard被声明为具有 MyStoryboard 键的资源。我创建了一个带有 EventTrigger 的 Button,以表明我可以通过使用 Binding 表达式引用 Storyboard 来触发它。这是我的用户控件的完整 XAML:

<UserControl x:Class="UserControlStoryboard.UserControl1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Height="300" Width="300">
<UserControl.Resources>
<Storyboard x:Key="MyStoryboard">
<ColorAnimation Storyboard.TargetName="grid" Storyboard.TargetProperty="(Grid.Background).Color" From="CadetBlue" To="White" Duration="0:0:2" />
</Storyboard>
</UserControl.Resources>
<Grid Background="CadetBlue" x:Name="grid">
<Button Content="Press Me" Height="50">
<Button.Triggers>
<EventTrigger RoutedEvent="Button.Click">
<BeginStoryboard>
<BeginStoryboard.Storyboard>
<Binding RelativeSource="{RelativeSource FindAncestor, AncestorType={x:Type UserControl}}" Path="Resources[MyStoryboard]" />
</BeginStoryboard.Storyboard>
</BeginStoryboard>
</EventTrigger>
</Button.Triggers>
</Button>
</Grid>

我曾希望,既然我能够通过使用绑定(bind)表达式引用它来告诉 Storyboard 开始,我应该能够从包含此 UserControl 作为子元素的 Window 中执行完全相同的操作。但我似乎无法弄清楚如何在父窗口中获取对 Storyboard 的引用。这不可能仅在 XAML 中完成吗?

我的测试项目中的父窗口只有一个按钮和此 UserControl 的一个实例。如果可能的话,哪个元素可以让我添加一个 EventTrigger,其中事件源是 Button 并且触发操作会告诉 UserControl 的 Storyboard 开始?

谢谢。

最佳答案

我认为在 UserControl 中响应外部事件的想法不是一个非常安全的想法。在 UserControl 中,您只想对控件中产生的事件使用react。

你能扭转局面并做到以下几点吗?

  • 将需要动画的 UC 属性公开为依赖属性(在本例中为背景)
  • 在父窗口中创建 EventTrigger 和 Storyboard

关于c# - 仅使用 XAML 从 WPF 中的父窗口控制 UserControl 的 Storyboard,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/438795/

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