wpf - My Custom Event does not produce anything -
i'm trying create custom routedevent in order trigger animation whenever text property of textblock changes. class inherits textblock class , shadow text property. i'm using button in order change text property in other value. code not produce errors doesn't anything. i'm sure problem textchanged event because when replace let's mouseenter event, works ok.
public class mycustomtextblock inherits textblock public shared readonly textchangedevent routedevent = eventmanager.registerroutedevent("textchanged", _ routingstrategy.bubble, gettype(routedeventargs), gettype(mycustomtextblock)) public custom event textchanged routedeventhandler addhandler(byval value routedeventhandler) me.addhandler(textchangedevent, value) end addhandler removehandler(byval value routedeventhandler) me.removehandler(textchangedevent, value) end removehandler raiseevent(byval sender object, byval e system.windows.routedeventargs) me.raiseevent(e) end raiseevent end event public shared shadows textproperty dependencyproperty = dependencyproperty.register("text", gettype(string), gettype(mycustomtextblock), new frameworkpropertymetadata(string.empty, new propertychangedcallback(addressof textpropertychanged))) private shared sub textpropertychanged(byval sender object, byval e dependencypropertychangedeventargs) directcast(sender, mycustomtextblock).raiseevent(new routedeventargs(mycustomtextblock.textchangedevent)) end sub end class xaml
<window x:class="mainwindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="clr-namespace:wpfapplication1" title="mainwindow" height="350" width="525"> <window.resources> <style targettype="local:mycustomtextblock"> <style.triggers> <eventtrigger routedevent="local:mycustomtextblock.textchanged"> <eventtrigger.actions> <beginstoryboard> <storyboard> <doubleanimation storyboard.targetproperty="fontsize" to="30" duration="0:0:1" /> </storyboard> </beginstoryboard> </eventtrigger.actions> </eventtrigger> </style.triggers> </style> </window.resources> <grid> <local:mycustomtextblock x:name="textblock1" text="xxxxxxxxx" background="yellow" width="100" height="25" /> <button content="change text" height="23" horizontalalignment="left" margin="217,218,0,0" name="button1" verticalalignment="top" width="75" /> </grid> class main window private sub button1_click(byval sender system.object, byval e system.windows.routedeventargs) handles button1.click textblock1.text = "apollon" end sub end class
it looks problem you're creating new members conflict on base textbox. should consider using textchanged event exists on textbox, or if need own, name different. here far aren't doing base properties don't already.
the main issue specific question though appears new textproperty created. shouldn't hide dependency property on base class, because can't control 1 used in every situation, because there mechanisms built in make unnecessary. in case you've aggravated problem not implementing boilerplate code dp. because have no wrapper property, setting of text property code setting textbox.text, internally calling setvalue textbox.textproperty, hence skipping code entirely.
instead of declaring own textproperty can tack on metadata existing one. add change handler existing property add call static constructor:
textproperty.overridemetadata(gettype(mycustomtextblock), new frameworkpropertymetadata(string.empty, new propertychangedcallback(addressof textpropertychanged)))
Comments
Post a Comment