未定义类型“ <类型名称>”

时间:2018-06-19 19:49:56

标签: vb.net xaml uwp

我有UWP(VB.NET)应用程序,它的按钮是动态创建的。在创建按钮时,我还为它们动态创建了单击事件。点击事件是使用frame.navigate(GetType(<typename>))导航到不同的页面。但是,出现错误:未定义类型'T'。

'T'是我在代码中声明的类型。请在下面查看我的代码。非常感谢您的帮助。

Public ButtonPipingSample As Button 'used for sizing and margins
Public ButtonsPiping As New ArrayList

Private Sub PipingToolsButtonsLoad()
    Dim XmlToolsDoc As XDocument = XDocument.Load("Tools.xml")

    Dim query = From t In XmlToolsDoc.Descendants("TOOL")
                Where t.Element("CATEGORY").Value.ToUpper = "PIPING"
                Select t

    Dim PipingButtons(query.Count - 1, 10) As String
    Dim NumberOfPipingButtons = query.Count - 1

    For i = 0 To NumberOfPipingButtons
        'ID, NAME, CATEGORY, margin, horizontalcontentalignment, background, borderbrush, width, height, fontsize
        PipingButtons(i, 0) = query.ElementAt(i).Element("ID").Value   'ID
        PipingButtons(i, 1) = query.ElementAt(i).Element("NAME").Value 'NAME
        PipingButtons(i, 2) = query.ElementAt(i).Element("CATEGORY").Value   'CATEGORY
        PipingButtons(i, 3) = "0,0,30,0"   'Margin
        PipingButtons(i, 4) = "Center" 'HorizontalContentAlignment
        PipingButtons(i, 5) = "#33109772"   'Background
        PipingButtons(i, 6) = "Green"   'BorderBrush
        PipingButtons(i, 7) = "170"    'Width
        PipingButtons(i, 8) = "80"   'Height
        PipingButtons(i, 9) = "13"   'FontSize
        PipingButtons(i, 10) = query.ElementAt(i).Element("HINT").Value
    Next

    'Clear Buttons Array
    ButtonsPiping.Clear()

    'Create buttons
    For i = 0 To NumberOfPipingButtons
        Dim ButtonPiping As New Button
        Dim TextBlockButtonPiping As New TextBlock

        TextBlockButtonPiping.Text = PipingButtons(i, 1)
        TextBlockButtonPiping.HorizontalAlignment = True
        TextBlockButtonPiping.TextWrapping = True
        TextBlockButtonPiping.TextAlignment = TextAlignment.Center
        ButtonPiping.Content = TextBlockButtonPiping
        ButtonPiping.Margin = New Thickness(15, 0, 30, 15)

        ButtonPiping.Background = New SolidColorBrush(Windows.UI.Colors.DeepPink)
        ButtonPiping.BorderBrush = New SolidColorBrush(Windows.UI.Colors.Blue)
        ButtonPiping.Width = PipingButtons(i, 7)
        ButtonPiping.Height = PipingButtons(i, 8)
        ButtonPiping.FontSize = PipingButtons(i, 9)
        ButtonPiping.Name = PipingButtons(i, 0)

        AddHandler ButtonPiping.Click, AddressOf ButtonPipingToolClick

        ButtonPipingSample = ButtonPiping
        ButtonsPiping.Add(ButtonPiping)
    Next
End Sub

Private Sub ButtonPipingToolClick(sender As Object, e As RoutedEventArgs)
    Dim T As Type = Type.GetType(sender.name)


    Frame.Navigate(GetType(T))
End Sub

2 个答案:

答案 0 :(得分:1)

看看代码中的逻辑,我认为ButtonPipingToolClick应该包含

Dim T As Type = Type.GetType(sender.name)
Dim X As Type = T ' You aleady know that T is of Type Type
Frame.Navigate(X) ' or T

答案 1 :(得分:0)

我是那样做的。

Private Sub ButtonPipingToolClick(sender As Object, e As RoutedEventArgs)


    Dim ans As String = "Mechanical Engineering Tools, Version=1.0.0.0"

    Dim an As New System.Reflection.AssemblyName(ans)

    Dim a As Assembly = Assembly.Load(an)

    'TxtBlockTypeTest.Text = a.GetTypes().ToString

    For Each T As Type In a.GetTypes()

        Dim ButtonName As String = "_" & sender.name.ToString

        If ButtonName = T.Name.ToString Then
            Frame.Navigate(T)
        End If

    Next

End Sub