将ScrollViewer(通过c#代码)添加到TabPage

时间:2012-12-11 02:02:00

标签: c# wpf-controls

我正在尝试向System.Windows.Controls.ScrollViewer添加System.Windows.Forms.TabPage,但是,Add(ScrollViewer)函数无效。

有没有办法将ScrollViewer添加到内置的TabPage,而不是XAML。

感谢。

1 个答案:

答案 0 :(得分:0)

由于您已将此标记为WPF,我猜测对Form的引用可能有误?

以下是选项卡中页面的示例 - 我们的想法是确保工具栏保持在顶部,状态栏保留在底部(不是MainWindow状态栏...)和中间的内容可以滚动..

Dim vScrollViewer As New ScrollViewer
        Dim vSP As New StackPanel
        With vSP
            .HorizontalAlignment = Windows.HorizontalAlignment.Stretch
            .VerticalAlignment = Windows.VerticalAlignment.Stretch
        End With
        Dim vInnerGrid As New Grid
        vScrollViewer.Content = vSP
        vSP.Children.Add(vInnerGrid)

vScollViewer可以添加到任何其他控件(例如三行网格的中间)

完整活动

Private Sub Website_WebPage_Page_Initialized(sender As Object, e As System.EventArgs) Handles Me.Initialized
    Try
        Dim vScrollViewer As New ScrollViewer
        Dim vSP As New StackPanel
        With vSP
            .HorizontalAlignment = Windows.HorizontalAlignment.Stretch
            .VerticalAlignment = Windows.VerticalAlignment.Stretch
        End With
        Dim vInnerGrid As New Grid
        vScrollViewer.Content = vSP
        vSP.Children.Add(vInnerGrid)

        Dim Col1 As New ColumnDefinition
        With Col1
            .Width = New GridLength(120)
        End With
        Dim Col2 As New ColumnDefinition
        With Col2
            .Width = New GridLength(200, GridUnitType.Star)
        End With



        With Website_WebPage_Grid
            .Background = New SolidColorBrush(Colors.White)
        End With

        With vInnerGrid
            .ColumnDefinitions.Add(Col1)
            .ColumnDefinitions.Add(Col2)
        End With



        For i As Integer = 0 To 11 ' 
            Dim vRow As New RowDefinition
            With vRow
                If i = 11 Then
                    .Height = New GridLength(200, GridUnitType.Star)

                Else
                    .Height = New GridLength(35)
                End If
            End With
            vInnerGrid.RowDefinitions.Add(vRow)
        Next

        Dim UpperRow As New RowDefinition
        With UpperRow
            .Height = New GridLength(35)
        End With
        Dim MiddleRow As New RowDefinition
        With MiddleRow
            .Height = New GridLength(200, GridUnitType.Star)
        End With
        Dim BottomRow As New RowDefinition
        With BottomRow
            .Height = New GridLength(35)
        End With
        With Website_WebPage_Grid
            .RowDefinitions.Add(UpperRow)
            .RowDefinitions.Add(MiddleRow)
            .RowDefinitions.Add(BottomRow)
        End With

        Dim vToolBar As New ToolBar
        With vToolBar
            .Height = 35
        End With
        Grid.SetRow(vToolBar, 0)


        Website_WebPage_Grid.Children.Add(vToolBar)


        Dim EditButton As New Button
        If NewRecord = False Then

            With EditButton
                .Content = ReturnToolBarImage("Edit.png")
                .ToolTip = "Edit the record"
                .Name = "WebsiteWebPage_EditButton"
            End With
            RegisterControl(Website_WebPage_Grid, EditButton, EditButton.Name.ToString)
            vToolBar.Items.Add(EditButton)
            vToolBar.Items.Add(TS_Separator)
        End If

        Dim SaveUpdateButton As New Button
        With SaveUpdateButton
            .Name = "WebsiteWebPage_SaveUpdateButton"
            If NewRecord = True Then
                .Content = ReturnToolBarImage("Record_Insert.png")
                .ToolTip = "Save the record"
            Else
                .Content = ReturnToolBarImageGrey("Record_Update.png")
                .ToolTip = "Update the record"
                .IsEnabled = False
            End If
        End With
        RegisterControl(Website_WebPage_Grid, SaveUpdateButton, SaveUpdateButton.Name.ToString)
        vToolBar.Items.Add(SaveUpdateButton)
        vToolBar.Items.Add(TS_Separator)


        Dim OutPutLB As New Label
        With OutPutLB
            .Name = "WebsiteAdministrator_OutputLB"
            .HorizontalAlignment = Windows.HorizontalAlignment.Right
            .VerticalAlignment = Windows.VerticalAlignment.Center
            .FontSize = 10
        End With
        RegisterControl(Website_WebPage_Grid, OutPutLB, OutPutLB.Name.ToString)
        Grid.SetColumnSpan(OutPutLB, 2)
        Grid.SetRow(OutPutLB, 0)
        vInnerGrid.Children.Add(OutPutLB)

        Dim vName As String = "WebsiteAdministrator_"
        For i As Integer = 1 To 7
            Dim vLabel As New Label
            With vLabel
                .FontSize = 10
                .VerticalAlignment = Windows.VerticalAlignment.Center
                .HorizontalAlignment = Windows.HorizontalAlignment.Left
            End With
            Dim vTB As New CustomControl.TBx
            With vTB
                .IsNewRecord = NewRecord
                '.Width = 200
            End With
            Select Case i
                Case 1
                    vLabel.Content = "Page Name"
                    With vTB
                        .Width = 200
                        .Name = vName & "PageNameTB"
                    End With
                Case 2
                    vLabel.Content = "Meta Description"
                    With vTB
                        .Width = 600
                        .Name = vName & "MetaDescriptionTB"
                    End With
                Case 3
                    vLabel.Content = "Title"
                    With vTB
                        .Width = 400
                        .Name = vName & "TitleTB"
                    End With
                Case 4
                    vLabel.Content = "Navigate URL"
                    With vTB
                        .Width = 400
                        .Name = vName & "NavigateURLTB"
                    End With
                Case 5
                    vLabel.Content = "Menu Text"
                    With vTB
                        .Width = 200
                        .Name = vName & "MenuTextTB"
                    End With
                Case 6
                    vLabel.Content = "Menu ToolTip"
                    With vTB
                        .Width = 400
                        .Name = vName & "MenuToolTipTB"
                    End With
                Case 7
                    vLabel.Content = "Menu Position"
                    With vTB
                        .Width = 100
                        .Name = vName & "MenuPositionTB"
                    End With

            End Select
            Grid.SetColumn(vLabel, 0)
            Grid.SetRow(vLabel, i)
            Grid.SetColumn(vTB, 1)
            Grid.SetRow(vTB, i)
            vInnerGrid.Children.Add(vLabel)
            vInnerGrid.Children.Add(vTB)


        Next

        Grid.SetRow(vScrollViewer, 1)
        Website_WebPage_Grid.Children.Add(vScrollViewer)


        Dim DP As DockPanel = PageStatusBarDP(Website_WebPage_Grid)
        Grid.SetRow(DP, 2)
        Grid.SetColumnSpan(DP, 2)
        Website_WebPage_Grid.Children.Add(DP)


    Catch ex As Exception
        EmailError(ex)
    End Try
End Sub