Silverlight 4 Teil 3: Der Rechtsklick nun auch etwas anders

Von Mario Meir-Huber Autor Feed 4. January 2010 22:31

Dieses Beispiel erklärt den neuen Rechtsklick in Silverlight 4. Dieser kann nun das vorher omnipräsente Rechtsklick-Menü ersetzen. Das Beispiel dient als Erweiterung zu Teil 1 – die RichTextArea.

Damit unser Rechtsklick auch Sinn macht, müssen wir ein Menü anzeigen. Hierfür erstellen wir ein Popup. Dieses enthält ein StackPanel mit den drei typischen Operationen “Einfügen, kopieren und ausschneiden”.

        <Popup Name="popUp" MouseLeftButtonUp="popUp_MouseLeftButtonUp">
                
            <StackPanel>
                <Button Content="Paste" Click="ClipOperations" />
                <Button Content="Copy" Click="ClipOperations"/>
                <Button Content="Cut" Click="ClipOperations"/>
            </StackPanel>
                
        </Popup>

Unser Rechtsklick soll nun mit der RichTextArea verknüpft werden. Damit der Rechtsklick nicht das bereits vorhandene Silverlight 4 Menü anzeigt, muss im “RightButtonDown”-Event des gewünschten Rechtsklick-Objektes “e.Handled” auf “true” gesetzt werden.

private void TextArea_MouseRightButtonDown(object sender, MouseButtonEventArgs e)
{
    e.Handled = true;
}

Unser Menü wird nun im “MouseRightButtonUp” angezeigt. Die Position für unser Popup setzen wir über den HorizontalOffset und den VerticalOffset. Die Position bekommen wir mit e.GetPosition(this).

private void TextArea_MouseRightButtonUp(object sender, MouseButtonEventArgs e)
{
    popUp.HorizontalOffset = e.GetPosition(this).X;
    popUp.VerticalOffset = e.GetPosition(this).Y;
    popUp.IsOpen = true;
}

 

Damit können wir bereits ein Menü anzeigen. Nun fehlen nur noch die Operationen. Hierfür wird der Text (Content) des Buttons verwendet.

Will man Text einfügen, so stellt die Klasse “Clipboard” die statische Methode “ContainsText()” zur Verfügung. Diese liefert uns einen boolschen Wert, ob Text in der Zwischenablage vorhanden ist. Damit keine Exception auftritt, muss die RichTextArea auch noch auf eine vorhandene Selection überprüft werden. Die “SetText” und “GetText”-Methoden der RichTextArea erlauben uns nun, Text einzufügen beziehungsweise zu löschen.

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

    switch (operation)
    {
        case "Cut":
            if(Clipboard.ContainsText() && !string.IsNullOrEmpty(TextArea.Selection.Text))
            {
                Clipboard.SetText(TextArea.Selection.Text);
                TextArea.Selection.Text = string.Empty;
            }
            break;
        case "Paste":
            if (Clipboard.ContainsText())
            {
                TextArea.Selection.Text = Clipboard.GetText();
            }
            break;
        case "Copy":
            if (!string.IsNullOrEmpty(TextArea.Selection.Text))
            {
                Clipboard.SetText(TextArea.Selection.Text);
            }
            break;
    }

    popUp.IsOpen = false;
}

Dies wäre nun der Rechtsklick und die Clipboard-API. In den nächsten Posts geht es mit Bildern und DropTarget für die RichTextArea weiter!

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

www.microsoft.com/austria | © 2009 Microsoft Corporation. Alle Rechte vorbehalten.
BlogEngine.NET 2.5.0.6 powered by atwork