validation - WPF Custom TextBox ErrorTemplate -
i have custom autocompletetextbox class inherits textbox. works fine, except showing validation error, i.e. red border around control.
here it's style generic.xaml.
<setter property="background" value="{dynamicresource {x:static systemcolors.windowbrushkey}}" /> <setter property="foreground" value="{dynamicresource {x:static systemcolors.controltextbrushkey}}" /> <setter property="borderbrush" value="{dynamicresource {x:static systemcolors.controldarkbrushkey}}" /> <setter property="borderthickness" value="1" /> <setter property="horizontalcontentalignment" value="left" /> <setter property="padding" value="2" /> <setter property="template"> <setter.value> <controltemplate targettype="{x:type local:autocompletetextbox}"> <grid> <border x:name="part_border" snapstodevicepixels="true" background="{templatebinding background}" borderbrush="{templatebinding borderbrush}" borderthickness="{templatebinding borderthickness}"> <scrollviewer x:name="part_contenthost" snapstodevicepixels="{templatebinding snapstodevicepixels}" /> </border> <popup x:name="part_popup" staysopen="false"> <listbox x:name="part_listbox" horizontalcontentalignment="stretch" /> </popup> </grid> <controltemplate.triggers> <trigger property="isenabled" value="false"> <setter property="background" targetname="part_border" value="{dynamicresource {x:static systemcolors.controlbrushkey}}" /> <setter property="foreground" value="{dynamicresource {x:static systemcolors.graytextbrushkey}}" /> </trigger> <trigger property="isreadonly" value="true"> <setter property="foreground" value="{dynamicresource {x:static systemcolors.graytextbrushkey}}" /> </trigger> </controltemplate.triggers> </controltemplate> </setter.value> </setter> </style> i've checked snoop utility , found no red border. i've reviewed wpf's generic.xaml aero.normal.xaml and, honest, have no idea draws red validation border around invalid textbox.
i know similar questions assed before, reviwed answers , non of them helped.
you find default errortemplate in validation.cs source code:
public static class validation { /// <summary> /// template used generate validation error feedback on adornerlayer. default /// template is: /// <code> /// <border borderthickness="1" borderbrush="red"> /// <adornedelementplaceholder> /// </adornedelementplaceholder></border> /// </code> /// </summary> public static readonly dependencyproperty errortemplateproperty = dependencyproperty.registerattached("errortemplate", typeof(controltemplate), typeof(validation), new frameworkpropertymetadata( createdefaulterrortemplate(), frameworkpropertymetadataoptions.notdatabindable, new propertychangedcallback(onerrortemplatechanged))); private static controltemplate createdefaulterrortemplate() { controltemplate defaulttemplate = new controltemplate(typeof(control)); //<border borderthickness="1" borderbrush="red"> // <adornedelementplaceholder> //</adornedelementplaceholder></border> frameworkelementfactory border = new frameworkelementfactory(typeof(border), "border"); border.setvalue(border.borderbrushproperty, brushes.red); border.setvalue(border.borderthicknessproperty, new thickness(1)); frameworkelementfactory adornedelementplaceholder = new frameworkelementfactory(typeof(adornedelementplaceholder), "placeholder"); border.appendchild(adornedelementplaceholder); defaulttemplate.visualtree = border; defaulttemplate.seal(); return defaulttemplate; } ... } if want remove set validation.errortemplate attached property null.
<textbox validation.errortemplate="{x:null}" />
Comments
Post a Comment