create wpf application defining new control template textbox control. provide custom appearance textbox , implement functionality change appearance when textbox gets focus, loses focus , when content changes in text element (i.e. textchanged event occurs).
hint: initial state should default state (with choice of style), can toggle between gotfocus , lostfocus events.
this markup have far.... along code-behind textchanged requirement. iam unable make background change blue when change text of textblock. suggestions?
<window x:class="wpfapplication1.mainwindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" title="mainwindow" height="350" width="525"> <window.resources> <controltemplate x:key="mytextboxtemplate"> <border x:name="templateborder" padding="50" background="pink" borderbrush="blue" cornerradius="5" borderthickness="5" horizontalalignment="center"> <textblock> <!--scrollviewer text box allow entering of text--> <scrollviewer margin="0" x:name="part_contenthost"> </scrollviewer> </textblock> </border> <controltemplate.triggers> <trigger property="isenabled" value="false"> <setter targetname="templateborder" property="background" value="{staticresource disabledbackgroundbrush}"/> <setter targetname="templateborder" property="borderbrush" value="{staticresource disabledbackgroundbrush}"/> </trigger> <trigger property="ismouseover" value="true"> <setter targetname="templateborder" property="borderthickness" value="8"/> </trigger> <trigger property="iskeyboardfocused" value="true"> <setter targetname="templateborder" property="background" value="red"/> </trigger> </controltemplate.triggers> </controltemplate> </window.resources> <stackpanel> <textbox text="click me" fontweight="bold" template="{staticresource mytextboxtemplate}" name="mytextbox" textchanged="mytextbox_textchanged" opacity="1"/> </stackpanel> </window>
method:
private void mytextbox_textchanged(object sender, textchangedeventargs e) { mytextbox.background = brushes.blue; }
in controltemplate
not using property background textbox
. when set code-behind has no effect since it's not getting used controltemplate
border.
thus border
use background="{templatebinding background}"
.
something like:
<window.resources> <controltemplate x:key="mytextboxtemplate" targettype="{x:type textbox}"> <border x:name="templateborder" horizontalalignment="center" background="{templatebinding background}" borderbrush="{templatebinding borderbrush}" borderthickness="5" cornerradius="5" padding="50"> <textblock> <scrollviewer x:name="part_contenthost" margin="0" /> </textblock> </border> <controltemplate.triggers> <trigger property="isenabled" value="false"> <setter targetname="templateborder" property="background" value="{staticresource disabledbackgroundbrush}" /> <setter targetname="templateborder" property="borderbrush" value="{staticresource disabledbackgroundbrush}" /> </trigger> <trigger property="ismouseover" value="true"> <setter targetname="templateborder" property="borderthickness" value="8" /> </trigger> <trigger property="iskeyboardfocused" value="true"> <setter targetname="templateborder" property="background" value="red" /> </trigger> </controltemplate.triggers> </controltemplate> </window.resources> <stackpanel> <textbox name="mytextbox" fontweight="bold" opacity="1" template="{staticresource mytextboxtemplate}" text="click me" textchanged="mytextbox_textchanged" /> <button content="dummy button" /> </stackpanel>
Comments
Post a Comment