我需要一个完整的示例如何声明...并在使用它之后自定义路由事件。 其实我知道语法,但我不知道如何使它工作以及如何使用它 后来。你能给我一个简单的完整例子(vb代码对我来说更好)。 例如,单击按钮以在标签上显示文本。
答案 0 :(得分:0)
这是我使用自定义RoutedEvent
的一种简单方法:只要Text
的{{1}}属性发生更改(TextChanged事件),就触发动画:
在这个例子中,我创建了一个派生自TextBlock
的类。出于本演示的目的,我们将其称为TextBlock
。
首先我们定义MyCustomTextBlock
:
RoutedEvent
我们定义了RoutedEeventHandler:
Public Shared ReadOnly TextChangedEvent As RoutedEvent = EventManager.RegisterRoutedEvent("TextChanged", RoutingStrategy.Bubble, GetType(RoutedEventHandler), GetType(MyCustomTextBlock))
接下来,SHADOW Public Custom Event TextChanged As RoutedEventHandler
AddHandler(ByVal value As RoutedEventHandler)
Me.AddHandler(TextChangedEvent, value)
End AddHandler
RemoveHandler(ByVal value As RoutedEventHandler)
Me.RemoveHandler(TextChangedEvent, value)
End RemoveHandler
RaiseEvent(ByVal sender As Object, ByVal e As RoutedEventArgs)
Me.RaiseEvent(e)
End RaiseEvent
End Event
属性声明,以便您可以指定一个Callback方法:
Text
编辑:在上面的Public Shared Shadows TextProperty As DependencyProperty = DependencyProperty.Register("Text", GetType(String), MethodBase.GetCurrentMethod().DeclaringType, New FrameworkPropertyMetadata(String.Empty, New PropertyChangedCallback(AddressOf TextPropertyChanged)))
注册中,我使用DependencyProperty
来获取调用类型,因为我使用代码段来注入Reflection
注册调用,这使我的代码段更具动态性。如果您不想导入DependencyProperty
:
Reflection Namespace
定义每当Public Shared Shadows TextProperty As DependencyProperty = DependencyProperty.Register("Text", GetType(String), GetType(MyCustomTextBlock), New FrameworkPropertyMetadata(String.Empty, New PropertyChangedCallback(AddressOf TextPropertyChanged)))
值更改时执行的回调方法,提升Text
:
RoutedEvent
这就是代码的全部内容,现在让我们在XAML中使用它:
Private Shared Sub TextPropertyChanged(ByVal Sender As Object, ByVal e As DependencyPropertyChangedEventArgs)
DirectCast(Sender, MyCustomTextBlock).RaiseEvent(New RoutedEventArgs(MyCustomTextBlock.TextChangedEvent))
End Sub
在上面的触发器中,我只是将<local:MyCustomTextBlock>
<local:MyCustomTextBlock.Style>
<Style TargetType="local:MyCustomTextBlock">
<Style.Triggers>
<EventTrigger RoutedEvent="local:MyCustomTextBlock.TextChanged">
<BeginStoryboard>
<Storyboard>
<DoubleAnimation To="1.5" Duration="0:0:0.1" Storyboard.TargetProperty="(FrameworkElement.RenderTransform).(TransformGroup.Children)[1].(ScaleTransform.ScaleX)" AutoReverse="True"/>
<DoubleAnimation To="1.5" Duration="0:0:0.1" Storyboard.TargetProperty="(FrameworkElement.RenderTransform).(TransformGroup.Children)[1].(ScaleTransform.ScaleY)" AutoReverse="True"/>
</Storyboard>
</BeginStoryboard>
</EventTrigger>
</Style.Triggers>
</Style>
</local:MyCustomTextBlock.Style>
</local:MyCustomTextBlock>
的大小放大,然后向后缩小,所有这些都在200毫秒内,这为用户提供了一个文本已经改变的微妙姿势,将他们的注意力转移到新的值。
另外,如果您还没有,请在您的xaml页面顶部引用您的程序集:
TextBlock
为了简单起见,让VisualStudio为您提供连接。如果您键入<Window x:Class="MyWindow"
xmlns:local="clr-namespace:MyRoutedEventProject"/>
,那么Intellisense应弹出一个名称空间列表供您选择。找到项目的基本命名空间并插入它:
这是xmlns:local=
的简单用法,但是我经常使用的真实用例。我希望它有所帮助。