Raising event in custom control.

Posted by SeSSiZ on Stack Overflow See other posts from Stack Overflow or by SeSSiZ
Published on 2009-12-08T09:49:42Z Indexed on 2010/06/11 21:02 UTC
Read the original article Hit count: 298

Filed under:
|

Hi all,

I'm writing a custom textblock control thats populate hyperlinks and raises event when clicked to hyperlink.

I wrote this code but I got stucked.

My code is :

Imports System.Text.RegularExpressions
Public Class CustomTextBlock
Inherits TextBlock

Public Event Klik As EventHandler(Of EventArgs)
Public ReadOnly InlineCollectionProperty As DependencyProperty = DependencyProperty.Register("InlineCollection", GetType(String), GetType(CustomTextBlock), New PropertyMetadata(New PropertyChangedCallback(AddressOf CustomTextBlock.InlineChanged)))

Private Shared Sub InlineChanged(ByVal sender As DependencyObject, ByVal e As DependencyPropertyChangedEventArgs)

    DirectCast(sender, CustomTextBlock).Inlines.Clear()

    Dim kelimeler = Split(e.NewValue, " ")
    For i = 0 To kelimeler.Length - 1
        If Regex.Match(kelimeler(i), "(http|ftp|https):\/\/[\w\-_]+(\.[\w\-_]+)+([\w\-\.,@?^=%&:/~\+#]*[\w\-\@?^=%&/~\+#])?").Success Then

            Dim x = New Hyperlink(New Run(kelimeler(i)))
            x.AddHandler(Hyperlink.ClickEvent, New RoutedEventHandler(AddressOf t_Click))
            x.ToolTip = kelimeler(i)
            x.Tag = kelimeler(i)
            DirectCast(sender, CustomTextBlock).Inlines.Add(x)
            If Not i = kelimeler.Length Then DirectCast(sender, CustomTextBlock).Inlines.Add(" ")
        Else
            DirectCast(sender, CustomTextBlock).Inlines.Add(kelimeler(i))
            If Not i = kelimeler.Length Then DirectCast(sender, CustomTextBlock).Inlines.Add(" ")
        End If
        ''//Console.WriteLine(kelime(i).ToString.StartsWith("@"))
    Next
    kelimeler = Nothing
End Sub
Public Property InlineCollection As String
    Get
        Return DirectCast(GetValue(InlineCollectionProperty), String)
    End Get
    Set(ByVal value As String)
        SetValue(InlineCollectionProperty, value)
    End Set
End Property

Private Shared Sub t_Click(ByVal sender As Hyperlink, ByVal e As System.Windows.RoutedEventArgs)
    e.Handled = True
    RaiseEvent Klik(sender, EventArgs.Empty)
End Sub
End Class

This code gives error at RaiseEvent Klik(sender, EventArgs.Empty)

Error is : Cannot refer to an instance member of a class from within a shared method or shared member initializer without an expliticit instance of the class.

Thanks for your answers, Alper

© Stack Overflow or respective owner

Related posts about wpf

Related posts about vb.net