Vectorlight News

  • Chat App Converted to HTML and JQuery
    Sep 08, 2011

    Converted from Silverlight to HTML and Javascript/JQuery is the Vectorlight Chat App. Login using your Vectorlight password to chat using your username and avatar.

  • HTML5 iPhone,Android Big Guns Tower Defense
    Jul 02, 2011

    Big Guns has made the leap from Windows Phone 7 (XNA) to HTML5 so you can now play it on your iPhone, Android and other HTML5 compatible devices.

  • HTML5 Games - Word Poppers and Batty
    Jun 04, 2011

    As the take-up of HTML5 quickens (74% of users currently have a browser capable of HTML5 Canvas) we present two more games for both your browser and mobile.

  • Big Guns Tower Defense on Windows Phone 7
    May 06, 2011

    Coming soon to Windows Phone 7 is an XNA port of the popular Vectorlight tower defense game Super Tower Defense. Whilst retaining many of the graphical and gameplay features of the original Silverlight game.

  • Wakacube WP7 Update
    Apr 26, 2011

    Released to the Windows Phone 7 marketplace today is Version 1.1 of Wakacube the 3D physics game of skill. Included in the update are more levels (30 in total) and new mode Wakatime which generates random crate structures to keep players entertained long after the levels have been completed.

  • Home Page News

Low Level Element Manipulation

From version 5.2.7 onwards there are included in the RichTextBox several extra methods to enable direct access to the visual elements that make up a RichText document.  This new functionality can be used, for example to implement your own HTML serialization or as in the example here to replace certain UIElements without needing to reload the document.



In this example we will show how to replace an image element with another.

<UserControl x:Class="LowLevelRTB.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:liquid="clr-namespace:Liquid"
    Width="320" Height="300">
    <Grid x:Name="LayoutRoot">
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto" />
            <RowDefinition Height="Auto" />
            <RowDefinition />
        </Grid.RowDefinitions>
        <Button x:Name="happyToSad" Grid.Row="0" Margin="0 0 0 4" Content="Convert Happy to Sad!" Click="happyToSad_Click" />
        <Button x:Name="sadToCheckbox" Grid.Row="1" Margin="0 0 0 10" Content="Convert Sad to Checkbox!" Click="sadToCheckbox_Click" />
        <liquid:RichTextEditor x:Name="richTextEditor" Grid.Row="2" Width="320" />
    </Grid>
</UserControl>


As you can see in the above we are using the new Rich Text Editor user control which is basically a wrapped up Liquid RichTextBox with some standard formatting buttons included.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using System.Windows.Media.Imaging;

namespace LowLevelRTB
{
    public partial class MainPage : UserControl
    {
        public MainPage()
        {
            InitializeComponent();

            richTextEditor.Html = "<p>Happy <img src=\"images/happy.png\" />... Sad <img src=\"images/unhappy.png\" /></p>";
        }

        private void happyToSad_Click(object sender, RoutedEventArgs e)
        {
            Image temp;
            BitmapImage source;
            UIElement element;
            Image newImage;
            int i;

            // Here we iterate through all the child elements of the RichTextBox and replace smiling images with sad images
            for(i=richTextEditor.TextBox.Children.Count-1; i>=0; i--)
            {
                element = richTextEditor.TextBox.Children[i];

                if (element is Image)
                {
                    temp = (Image)element;
                    source = (BitmapImage)temp.Source;

                    if(source.UriSource.ToString().EndsWith("/happy.png"))
                    {
                        newImage = new Image()
                        {
                            Source = new BitmapImage(new Uri("images/unhappy.png", UriKind.Relative)),
                            Stretch = Stretch.None
                        };

                        // As we are swapping an image with another image we could just change the Uri property
                        // However for this example we want to show how to swap one UIElement with another
                        richTextEditor.TextBox.SwapElement(element, newImage);
                    }
                }
            }
        }

        private void sadToCheckbox_Click(object sender, RoutedEventArgs e)
        {
            Image temp;
            BitmapImage source;
            UIElement element;
            CheckBox newCheckbox;
            int i;

            // Here we iterate through all the child elements of the RichTextBox and replace unhappy images with checkboxes
            for (i = richTextEditor.TextBox.Children.Count - 1; i >= 0; i--)
            {
                element = richTextEditor.TextBox.Children[i];

                if (element is Image)
                {
                    temp = (Image)element;
                    source = (BitmapImage)temp.Source;

                    if (source.UriSource.ToString().EndsWith("/unhappy.png"))
                    {
                        newCheckbox = new CheckBox()
                        {
                            Content = "Click Me!",
                            Cursor = Cursors.Arrow
                        };

                        richTextEditor.TextBox.SwapElement(element, newCheckbox);
                    }
                }
            }
        }
    }
}


Using the new SwapElement method we iterate through the RichText document elements replacing certain elements with others.

Tweets

Silverlight Controls

  • Rich TextBox

    Create and edit rich content with this slick and expandable Rich TextBox...

  • TreeView

    This easy to use TreeView comes with drag and drop, sorting, searching and much more...

  • Context Menu

    You too can have cool popup context menus in your Silverlight applications...

  • Resizable Dialog

    Draggable and resizable popup dialogs are what serious Silverlight developers need...

  • Spell Checker

    Real-time spell checking in Silverlight? We did it first here...