我有一个名为 BlinkingLight 的自定义类。 我还有一个静态 ObservableCollection BlinkingLightCollection。 在 UI 中,我有一个绑定(bind)到 BlinkingLightCollection 的 ListBox。
在我的 ListBox 中,我希望将每个 BlinkingLight 对象基本上显示为自定义控件,该控件看起来像带有 LED 灯的盒子,该控件具有动画,使 LED 看起来就像只闪烁了一秒钟然后恢复正常。
我的 BlinkingLight 类具有第三方“LED”对象,该对象会引发名为“Flash”的事件。
我正在寻找想法或解决方案来使其发挥作用!
我失败的尝试:
我创建了一个自定义控件 (BlinkingLightControl),当 BlinkingLight 是我的自定义控件的 DataContext 时,它可以绑定(bind)到我的 BlinkingLight 类的数据。
我为列表框创建了一个数据模板:
<Window.Resources>
<DataTemplate x:Key="blinkingLightItemTemplate" >
<local:BlinkingLightControl />
</DataTemplate>
</Window.Resources>
<ListBox ItemsSource={Binding Source={x:Static local:Data.BlinkingLightCollection}}
ItemTemplate="{StaticResource blinkingLightItemTemplate}" />
注意:我可以将自定义控件的 xaml 放入数据模板中,而不是使用完全不同的控件(如果这样可以让事情变得更容易)。
现在我想在我的 BlinkingLightControl(或 DataTemplate)中有一个 EventTrigger,其 RoutedEvent 是 LED.Flash 事件。不幸的是我似乎无法弄清楚这部分。我尝试在 BlinkingLight 类中创建一个 RoutedEvent,并在处理 LED.Flash 事件时引发它。但是我的类不是 UIElement 或 ContentElement,根据 MSDN:MSND Link
“路由事件所有者可以是任何类,但路由事件必须由 UIElement 或 ContentElement 派生类引发并处理才能发挥作用。有关自定义事件的详细信息,请参阅如何:创建自定义路由事件”
任何帮助将不胜感激! 谢谢, 斯科特
最佳答案
在这种情况下,最好的方法是使用 WPF Commanding 并创建一个“BlinkTheLights”RouteCommand - 您的 BlinkingLightControl 将处理 BlinkTheLights 命令,并通过启动使灯闪烁的 StoryBoard 进行响应。
关于c# - 如何将事件触发器添加到业务对象的数据模板?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1422943/