ControlTemplates in WPF -


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