Dynamically changing properties in XAML such as Width, FontSize, etc for a TextBox

Posted on 2010-11-30
Last Modified: 2012-05-10
Hi All,

I am working on my Visual aspect of my controls right now. I am trying to dynamically change certain properties on the MouseOver and IsFocused ControlTemplate triggers of a TextBox.

I want to change the Width to the Current TextBox Width + 10 and FontSize to Current TextBox FontSize + 2 when the MouseOver trigger is True.

I can not figure out a way to do this in XAML.

I know how to do this easily in C#, but I am trying to keep all of this code in XAML.

How do I do this in a trigger????

<Setter Property="Width" Value="Width+20" />

Thanks in advance.
<Style x:Key="bhTextBoxStyle" x:Name ="bh1" TargetType="{x:Type BH:bh_TextBox}">

        <Setter Property="SnapsToDevicePixels"

            Value="True" />

        <Setter Property="OverridesDefaultStyle"

            Value="True" />

        <Setter Property="KeyboardNavigation.TabNavigation"

            Value="None" />

        <Setter Property="FocusVisualStyle"

            Value="{x:Null}" />

        <Setter Property="FontSize" Value="{DynamicResource bh_TextBoxFontSize}" />

        <Setter Property="Foreground" Value="{DynamicResource bh_ControlOffBlack}" />

        <Setter Property="Padding" Value="2,5" />

        <Setter Property="IsTabStop" Value="True" />

        <Setter Property="BorderThickness" Value="1" />

        <Setter Property="MinWidth"

            Value="1" />

        <Setter Property="MinHeight"

            Value="20" />

        <Setter Property="AllowDrop"

            Value="true" />

        <Setter Property="HorizontalContentAlignment" Value="Left" />

        <Setter Property="Template">


                <ControlTemplate x:Name="bh_ct_textbox" TargetType="{x:Type BH:bh_TextBox}">

                    <Border Name="Border"




                  Background ="{DynamicResource bh_TextBoxBrush}"

                  BorderBrush="{DynamicResource bh_TextBoxBorderBrush}">


                            <my:VisualStateGroup x:Name="CommonStates">

                                <my:VisualState x:Name="Normal" />

                                <my:VisualState x:Name="Disabled">




                                <my:VisualState x:Name="ReadOnly">




                                <my:VisualState x:Name="MouseOver">

                                  <Storyboard Name="TextBoxFade" AutoReverse="False">

                                    <DoubleAnimation  Name="TextBoxFadeAnimation"



                                            From="0.4" To="1.0" Duration="0:0:1" 

                                            AutoReverse="False" RepeatBehavior="1x" 






                        <ScrollViewer Margin="0"

                          x:Name="PART_ContentHost" />





                        <Trigger Property="IsMouseOver" Value="True">

                            <Setter TargetName ="Border" Property="BorderBrush" Value="{DynamicResource bh_MouseOverBorderBrush}" />

                            <Setter TargetName="Border" Property="BorderThickness" Value="3" />

                            <Setter Property="Width" Value="100" />

                            <Setter Property="FontSize" Value="{DynamicResource bh_TextBoxMouseOverFontSize}" />

                            <Setter Property="Padding" Value="2,1" />


Open in new window

Question by:HOLLYWUB
  • 2
  • 2

Expert Comment

ID: 34239368
There is no built-in way to handle expressions in your binding markup. I suggest you use the custom LambdaConverter to accomplish expression handling in your XAML.

Then, setup a resource (perhaps with a Key of "addtion") using the LambdaConverter with an expression of "value+parameter". Finally, your binding should use TemplateBinding to get at the control's own Width property.

<Window ...
    <XamlConverter:LambdaConverter x:Key="addition">value+parameter</XamlConverter:LambdaConverter>

  <Setter Property="Width" Value="{TemplateBinding Property=Width, Converter={StaticResource addition}, ConverterParameter='10'}" />

Open in new window


Author Comment

ID: 34251077
Hi Ventaur,

I am getting an Assembly not found error for XamlConverter.

What reference do I need to add to my project for the XamlConverter?


Accepted Solution

ventaur earned 500 total points
ID: 34252578
Please, note that I have not used the LambdaConverter myself. That said, the home page for the project mentions needing the Dynamic.cs file from some samples included with VS 2008 or the provided download link. It sounds like you should include that source file and the LamdaConverter.cs source file in your project somewhere in order to get all this working.

Author Closing Comment

ID: 34375107
The expert did not actually try this solution first. It didn't work. I went another route after searching other FREE knowledge bases.

I was very surprised I did not get a qualified soluition for this question.

Featured Post

DevOps Toolchain Recommendations

Read this Gartner Research Note and discover how your IT organization can automate and optimize DevOps processes using a toolchain architecture.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

More often than not, we developers are confronted with a need: a need to make some kind of magic happen via code. Whether it is for a client, for the boss, or for our own personal projects, the need must be satisfied. Most of the time, the Framework…
Real-time is more about the business, not the technology. In day-to-day life, to make real-time decisions like buying or investing, business needs the latest information(e.g. Gold Rate/Stock Rate). Unlike traditional days, you need not wait for a fe…
With the power of JIRA, there's an unlimited number of ways you can customize it, use it and benefit from it. With that in mind, there's bound to be things that I wasn't able to cover in this course. With this summary we'll look at some places to go…
Learn how to create flexible layouts using relative units in CSS.  New relative units added in CSS3 include vw(viewports width), vh(viewports height), vmin(minimum of viewports height and width), and vmax (maximum of viewports height and width).

911 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

17 Experts available now in Live!

Get 1:1 Help Now