Data Binding 101 Expression Syntax: Listing 2

Modified TextBox Style.

<Style x:Key="DataErrorStyle" TargetType="TextBox">
    <Setter Property="FontFamily" Value="{StaticResource PhoneFontFamilyNormal}"/>
    <Setter Property="FontSize" Value="{StaticResource PhoneFontSizeMediumLarge}"/>
    <Setter Property="Background" Value="{StaticResource PhoneTextBoxBrush}"/>
    <Setter Property="Foreground" Value="{StaticResource PhoneTextBoxForegroundBrush}"/>
    <Setter Property="BorderBrush" Value="{StaticResource PhoneTextBoxBrush}"/>
    <Setter Property="SelectionBackground" Value="{StaticResource PhoneAccentBrush}"/>
    <Setter Property="SelectionForeground" Value="{StaticResource PhoneTextBoxSelectionForegroundBrush}"/>
    <Setter Property="BorderThickness" Value="{StaticResource PhoneBorderThickness}"/>
    <Setter Property="Padding" Value="2"/>
    <Setter Property="Template">
    	<Setter.Value>
    		<ControlTemplate TargetType="TextBox">
    			<Grid x:Name="grid" Background="Transparent">
    				<VisualStateManager.VisualStateGroups>
<VisualStateGroup x:Name="CommonStates">
    ...
</VisualStateGroup>
<VisualStateGroup x:Name="FocusStates">
    ...
</VisualStateGroup>
<VisualStateGroup x:Name="ValidationStates">
    <VisualState x:Name="InvalidUnfocused">
    	<Storyboard>
    		<ObjectAnimationUsingKeyFrames 
                Storyboard.TargetProperty="(Border.BorderBrush)" 
                Storyboard.TargetName="border">
    			<DiscreteObjectKeyFrame KeyTime="0">
    				<DiscreteObjectKeyFrame.Value>
    					<SolidColorBrush Color="Red"/>
    				</DiscreteObjectKeyFrame.Value>
    			</DiscreteObjectKeyFrame>
    		</ObjectAnimationUsingKeyFrames>
    	</Storyboard>
    </VisualState>
    <VisualState x:Name="Valid"/>
    <VisualState x:Name="InvalidFocused">
    	<Storyboard>
    		<ObjectAnimationUsingKeyFrames 
                Storyboard.TargetProperty="(Border.BorderBrush)" 
                Storyboard.TargetName="border">
    			<DiscreteObjectKeyFrame KeyTime="0">
    				<DiscreteObjectKeyFrame.Value>
    					<SolidColorBrush Color="Red"/>
    				</DiscreteObjectKeyFrame.Value>
    			</DiscreteObjectKeyFrame>
    		</ObjectAnimationUsingKeyFrames>
    	</Storyboard>
    </VisualState>
</VisualStateGroup>    					
    				</VisualStateManager.VisualStateGroups>
<Border x:Name="border" BorderThickness="1" 
        Margin="{StaticResource PhoneTouchTargetOverhang}">
    <Border x:Name="EnabledBorder" BorderBrush="{TemplateBinding BorderBrush}" 
            BorderThickness="{TemplateBinding BorderThickness}" 
            Background="{TemplateBinding Background}" >
        <ContentControl x:Name="ContentElement" BorderThickness="0" 
                        HorizontalContentAlignment="Stretch" 
                        Margin="{StaticResource PhoneTextBoxInnerMargin}" 
                        Padding="{TemplateBinding Padding}" 
                        VerticalContentAlignment="Stretch"/>
    </Border>
</Border>
...
    			</Grid>
    		</ControlTemplate>
    	</Setter.Value>
    </Setter>
</Style>

About the Author

Nick Randolph runs Built to Roam, a consulting company that specializes in training, mentoring and assisting other companies build mobile applications. With a heritage in rich client applications for both the desktop and a variety of mobile platforms, Nick currently presents, writes and educates on the Windows Phone platform.

comments powered by Disqus

Featured

  • Get Started Using .NET Aspire with SQL Server & Azure SQL Database

    Microsoft experts are making the rounds educating developers about the company's new, opinionated, cloud-ready stack for building observable, production ready, distributed, cloud-native applications with .NET.

  • Microsoft Revamps Fledgling AutoGen Framework for Agentic AI

    Only at v0.4, Microsoft's AutoGen framework for agentic AI -- the hottest new trend in AI development -- has already undergone a complete revamp, going to an asynchronous, event-driven architecture.

  • IDE Irony: Coding Errors Cause 'Critical' Vulnerability in Visual Studio

    In a larger-than-normal Patch Tuesday, Microsoft warned of a "critical" vulnerability in Visual Studio that should be fixed immediately if automatic patching isn't enabled, ironically caused by coding errors.

  • Building Blazor Applications

    A trio of Blazor experts will conduct a full-day workshop for devs to learn everything about the tech a a March developer conference in Las Vegas keynoted by Microsoft execs and featuring many Microsoft devs.

  • Gradient Boosting Regression Using C#

    Dr. James McCaffrey from Microsoft Research presents a complete end-to-end demonstration of the gradient boosting regression technique, where the goal is to predict a single numeric value. Compared to existing library implementations of gradient boosting regression, a from-scratch implementation allows much easier customization and integration with other .NET systems.

Subscribe on YouTube