Silverlight 4 Teil 1: Die RichTextArea erklärt

Von Mario Meir-Huber Autor Feed 30. December 2009 13:02

Eine der interessantesten Neuerungen in Silverlight 4 ist die RichTextArea. Mit dessen Hilfe kann man schön formatierten Text in Silverlight 4 erstellen. Wie dieser funktioniert wird in diesem Beitrag erläutert.

Die RichTextArea ist sehr funktional, weshalb diese auch in den weiteren Beispielen verwendet wird. Also: das Projekt sehr gut aufheben, es wird in den nächsten Wochen wieder benötigt :).

Bevor wir beginnen müssen wir uns für ein Layout entscheiden. Wir werden eine Art Ribbon basteln – jedoch auf sehr sehr einfacher Weise. Hierfür brauchen wir eine Reihe mit der Höhe von 45 Pixeln. Im unteren Bereich wollen wir auch noch 30 Pixel frei halten. Eine Reihe von flexibler Größe wird in die Mitte gegeben.

    <Grid x:Name="LayoutRoot" Background="White">
        <Grid.RowDefinitions>
            <RowDefinition Height="45"></RowDefinition>
            <RowDefinition />
            <RowDefinition Height="30"></RowDefinition>
        </Grid.RowDefinitions>

Danach legen wir einen Verlauf für den “Ribbon” fest. Ein LinearGradientBrush erfüllt diese Anforderung voll und ganz. Der Ribbon wird in einem StackPanel mit einer Horizontalen Ausrichtung angegeben.

        <StackPanel Orientation="Horizontal">
            <StackPanel.Background>
                <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
                    <GradientStop Color="#6668A0FF" Offset="1"/>
                    <GradientStop Color="#7F1246A1"/>
                </LinearGradientBrush>
            </StackPanel.Background>

Die RichTextArea wird im Grid in der Reihe “1” eingefügt. Wie dies aussieht ist in der vorletzten Zeile des nachfolgenden Codes ersichtlich. Für unser Word-Nachbau brauchen wir vorerst drei Buttons und eine ComboBox (erweitert wird diese in den nächsten Einträgen). Der erste Button ist für fett, der zweite für kursiv und der dritte für unterstrichen zuständig. Die ComboBox enthält einige Schritgrößen von 8-22.

            <Button Margin="5" FontWeight="Bold" Width="40" Content="B" Click="Button_Click" />
            <Button Margin="5" FontStyle="Italic" Width="40" Content="I" Click="Button_Click" />
            <Button Margin="5" Width="40" Click="Underline">
                <TextBlock>
                    <Run TextDecorations="Underline">U</Run>
                </TextBlock>
            </Button>
            
            <ComboBox Width="150" Margin="5" SelectedValue="12" SelectionChanged="ComboBox_SelectionChanged">
                <ComboBoxItem Content="8" />
                <ComboBoxItem Content="10" />
                <ComboBoxItem Content="12" />
                <ComboBoxItem Content="14" />
                <ComboBoxItem Content="16" />
                <ComboBoxItem Content="18" />
                <ComboBoxItem Content="22" />
            </ComboBox>
            
            
        </StackPanel>
        <RichTextArea Name="TextArea" Grid.Row="1"></RichTextArea>
    </Grid>

Im nächsten Schritt wollen wir den Eventhandler für die ersten zwei Buttons erstellen. Dies ist fett und kursiv. Wichtig ist vorweg, das eine RichTextArea verschiedene Selektionen erlaubt. Diese sind über die “Selection” Property aufrufbar. Hier kann man mit “SetPropertyValue” die Eigenschaften setzen. Fett schreiben kann man mit der “FontWeightProperty”, kursiv mit der “FontStyleProperty” Enumeration.

private void Button_Click(object sender, RoutedEventArgs e)
{
    string cmd = ((Button)sender).Content.ToString();

    if (!string.IsNullOrEmpty(TextArea.Selection.Text))
    {
        switch (cmd)
        {
            case "B":
                TextArea.Selection.SetPropertyValue(TextElement.FontWeightProperty, FontWeights.ExtraBlack);
                break;

            case "I":
                TextArea.Selection.SetPropertyValue(TextElement.FontStyleProperty, FontStyles.Italic);
                break;

            default:
                break;
        }
    }
}

Ähnlich wie bei fett und kursiv verhält es sich auch bei unterstrichen. Hierfür verwenden wir das TextElement.TextDecorationsProperty mit TextDecorations.Underline.

private void Underline(object sender, RoutedEventArgs e)
{
    if (!string.IsNullOrEmpty(TextArea.Selection.Text))
    {
        TextArea.Selection.SetPropertyValue(TextElement.TextDecorationsProperty, TextDecorations.Underline);
    }
}

Und natürlich verhält sich auch die ComboBox ähnlich. Hierfür wird die Schriftgröße geändert sobald die ComboBox-Selection sich geändert hat.

private void ComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    ComboBox c = sender as ComboBox;
    ComboBoxItem ci = c.SelectedValue as ComboBoxItem;           

    if (!string.IsNullOrEmpty(TextArea.Selection.Text))
    {
        TextArea.Selection.SetPropertyValue(TextElement.FontSizeProperty, ci.Content);
    }
}

Die RichTextArea in Silverlight 4 bietet einige interessante Möglichkeiten. Jedoch ist dies nur ein sehr allgemeiner Einführungsteil. Mehr zu der RichTextArea wird in den kommenden Beispielen enthalten sein, wo die weiteren Änderungen zu Silverlight 4 vorgestellt werden.

Hier geht es zum Überblick zu Silverlight 4

Bei dieser Gelegenheit möchte ich auch auf den WPF/Silverlight Community Day hinweisen, welcher am 29. Jänner in Graz statt finden wird. Hier werden die Silverlight 4 Neuerungen nochmal beleuchtet.

Mario Meir-Huber

www.meirhuber.de

Add comment

  Country flag

biuquote
  • Comment
  • Preview
Loading

Datenschutzhinweis: Sie stimmen durch "Kommentar speichern" der Speicherung Ihrer Angaben durch Microsoft Österreich für die Beantwortung der Anfrage zu. Sie erhalten dadurch keine unerwünschten Werbezusendungen. Ihre Emailadresse wird auf Ihren Wunsch dazu verwendet Sie über neue Kommentare zu informieren.

Microsoft respektiert den Datenschutz. Datenschutz & Cookies

TechEd Europe 2013:

TechEd Europe 2013

Entwickler Wettbewerbe:

Wettbewerbe

Entwickler Events:

Developer Events

App für Windows 8, Windows Phone oder/und Azure? Diese Events zeigen Dir, wie es geht:

Mehr Information

Aktuelle Downloads

Windows Azure 90-day free trial
CodeFest.at on Facebook

Datenschutz & Cookies · Nutzungsbedingungen · Impressum · Markenzeichen
© 2013 Microsoft. Alle Rechte vorbehalten · BlogEngine.NET 2.7.0.0 · Diese Website wird für Microsoft von atwork gehostet.
powered by atwork