c# - Set DependencyProperty from reflection in wpf - type convertion -


i have fun wpf , decided build library custom implementation of attached triggers (similar system.windows.interactivity.dll), own.

i have class triggeraction represents action invoked trigger. want begin easy setting background of button while user click it.

i have written working code example eventtrigger class, have 1 problem settertriggeraction. have 2 dependency properties propertyname represents name of property should set value property. in invoke method try set property defined value.

here code:

internal override void invoke(dependencyobject obj) {         if (obj == null)              return;          if (string.isnullorempty(propertyname))              return;          propertyinfo property = obj.gettype().getproperty(propertyname, bindingflags.public | bindingflags.instance);          if (property == null)         {             debug.writeline("cannot find property {0} type {1}.", propertyname, obj.gettype());             return;         }          methodinfo setmethod = property.getsetmethod();          if (setmethod == null)         {             debug.writeline("the property {0} not have set method.", propertyname);             return;         }          try         {             setmethod.invoke(obj, new object[] { value });         }         catch(exception ex)         {             debug.writeline("exception caught {0} message {1}", ex.gettype(), ex.message);         }  } 

my second attempt:

internal override void invoke(dependencyobject obj) {         if (obj == null)              return;         if (string.isnullorempty(propertyname)) return;         fieldinfo property = obj.gettype().getfield(propertyname+"property", bindingflags.public | bindingflags.static | bindingflags.flattenhierarchy);         if (property == null)         {             debug.writeline("cannot find dependency property {0} type {1}.", propertyname+"property", obj.gettype());             return;         }         try         {             dependencyproperty dp = property.getvalue(obj) dependencyproperty;             if(dp == null)             {                 debug.writeline("cannot dependencyproperty {0}", propertyname + "property");                 return;             }             obj.setvalue(dp, value);         }         catch(exception ex)         {             debug.writeline("exception caught {0} message {1}", ex.gettype(), ex.message);         }     } 

in xaml wrote:

<button horizontalalignment="center" verticalalignment="center" content="click">         <i:interaction.triggers>             <i:eventtrigger eventname="click">                 <i:settertriggeraction propertyname="background" value="red"/>             </i:eventtrigger>         </i:interaction.triggers>     </button> 

so when click button want make background red. both versions of invoke method suffers convertion issue , in output window message "red" not valid value property background (because treated string not brush!). there way convert value xaml (string "red") valid brush value? have general way of converting properties possible.

i consider similar want achieve done when xaml parsed , properties of controls set.

any appreciated.

to convert string brush use default type converter class brushconverter:

var redbrush = (brush)new brushconverter().convertfromstring("red"); 

Comments

Popular posts from this blog

mysql - Dreamhost PyCharm Django Python 3 Launching a Site -

java - Sending SMS with SMSLib and Web Services -

java - How to resolve The method toString() in the type Object is not applicable for the arguments (InputStream) -