WPF控件中的奇怪滚动条行为

WPF控件中的奇怪滚动条行为,wpf,wpf-controls,Wpf,Wpf Controls,我制作了以下简单控件,我将其作为弹出窗口添加到另一个窗口中(开始隐藏,单击按钮变为可见) 除了列表框侧面的滚动条外,一切似乎都很正常。这大约从整个控件的一半高度开始,当试图向下滑动列表时,列表不会滚动,但滚动条会缩小到一个小条,然后开始滚动到窗口的内容。同样,向上拖动该条:当该条位于滚动区域的一半时,列表框将到达列表的顶部,然后该条将展开 谁能帮我纠正这种行为/解释我做错了什么 谢谢。 皮特 经过更多的实验,事情变得越来越奇怪 导入AshbyTools 导入System.DirectorySe

我制作了以下简单控件,我将其作为弹出窗口添加到另一个窗口中(开始隐藏,单击按钮变为可见)

除了列表框侧面的滚动条外,一切似乎都很正常。这大约从整个控件的一半高度开始,当试图向下滑动列表时,列表不会滚动,但滚动条会缩小到一个小条,然后开始滚动到窗口的内容。同样,向上拖动该条:当该条位于滚动区域的一半时,列表框将到达列表的顶部,然后该条将展开

谁能帮我纠正这种行为/解释我做错了什么

谢谢。 皮特

经过更多的实验,事情变得越来越奇怪

导入AshbyTools 导入System.DirectoryServices.AccountManagement 导入System.ComponentModel

公共类AddGroupsCtrl Dim\u domainString作为字符串 作为字符串的暗字符串

Public Event addClicked(ByVal glist As List(Of String))

<Description("ouString"), DisplayName("OU String"), Category("Data")>
Public Property ouString As String
    Get
        Return _ouString
    End Get
    Set(value As String)
        _ouString = value
    End Set
End Property

<Description("domainString"), DisplayName("Domain String"), Category("Data")>
Public Property domainString As String
    Get
        Return _domainString
    End Get
    Set(value As String)
        _domainString = value
    End Set
End Property
Private Sub button_Click(sender As Object, e As RoutedEventArgs) Handles button.Click
    Me.Visibility = Visibility.Hidden
End Sub

Public Sub loadGroups()
    grouplistBox.Items.Clear()
    Dim groupCTX As PrincipalContext = ADTools.getConnection(domainString, ouString)
    Dim gList As List(Of GroupPrincipal) = ADTools.getManagedGroups(groupCTX)
    Dim gsList As New List(Of String)
    For Each grp As GroupPrincipal In gList
        If Not (grp.DistinguishedName.Contains("Staff Groups") Or grp.DistinguishedName.Contains("Subject Groups") Or grp.DistinguishedName.Contains("Tutor Groups")) Then
            gsList.Add(grp.DisplayName)
        End If
    Next

    'For n As Integer = 1 To 70
    '    grouplistBox.Items.Add("item" & n)
    'Next

    gsList.Sort()
    For Each grp As String In gsList
        grouplistBox.Items.Add(grp)
    Next
End Sub

Private Sub addButton_Click(sender As Object, e As RoutedEventArgs) Handles addButton.Click
    Dim ret As New List(Of String)
    For Each grp In grouplistBox.SelectedItems
        ret.Add(grp.ToString)
    Next
    RaiseEvent addClicked(ret)
End Sub
Public Event addClicked(ByVal glist作为列表(字符串))
公共属性ouString作为字符串
得到
返回字符串
结束
设置(值为字符串)
_uString=值
端集
端属性
公共属性domainString作为字符串
得到
返回\u域字符串
结束
设置(值为字符串)
_域字符串=值
端集
端属性
私有子按钮\单击(发送者作为对象,e作为路由EventTargets)处理按钮。单击
Me.Visibility=Visibility.Hidden
端接头
公共子加载组()
grouplistBox.Items.Clear()
Dim groupCTX As PrincipalContext=ADTools.getConnection(域字符串,ouString)
Dim gList As List(组主体的)=ADTools.getManagedGroups(groupCTX)
将gsList变为新列表(字符串)
对于每个grp,作为gList中的GroupPrincipal
如果不是(grp.DifferentiedName.Contains(“员工组”)或grp.DifferentiedName.Contains(“主题组”)或grp.DifferentiedName.Contains(“导师组”)),则
gsList.Add(grp.DisplayName)
如果结束
下一个
'对于n作为整数=1到70
'grouplistBox.Items.Add(“item”&n)
”“接着呢
gsList.Sort()
对于gsList中的每个grp作为字符串
grouplistBox.Items.Add(grp)
下一个
端接头
私有子添加按钮\单击(发件人作为对象,e作为路由EventTargets)处理添加按钮。单击
Dim ret作为新列表(字符串)
对于grouplistBox中的每个grp.SelectedItems
ret.Add(grp.ToString)
下一个
RaiseEvent添加已单击(ret)
端接头
末级

如果替换 对于gsList中的每个grp作为字符串 grouplistBox.Items.Add(grp) 下一个

使用注释掉的代码,滚动条可以完美地工作。 通过gsList中的字符串列表,我得到了奇怪的行为


我可以发布整个项目,但由于它是针对我们的active directory结构硬编码的,因此无法在另一个系统上编译。(另外,由于我只是用它来学习WPF,而且它是一个内部工具,我已经硬编码了许多密码)

好的,我已经解决了这个问题。答案更令人困惑。结果是,在代码中,我得到了要添加到字符串列表中的组的DisplayName,它为每个字符串返回“Nothing”。但不知何故,列表显示正确(尽管有一个扭曲的滚动条)。现在我将其更改为返回grp.name而不是displayname,并且一切都如我所期望的那样工作。

好的,我已经解决了这个问题。答案更令人困惑。结果是,在代码中,我得到了要添加到字符串列表中的组的DisplayName,它为每个字符串返回“Nothing”。但不知何故,列表显示正确(尽管有一个扭曲的滚动条)。现在我把它改为返回grp.name而不是displayname,一切都如我所期望的那样工作。是我,还是WPF有可怕的马车?
    For Each grp As String In gsList
        grouplistBox.Items.Add(grp)
    Next
Public Event addClicked(ByVal glist As List(Of String))

<Description("ouString"), DisplayName("OU String"), Category("Data")>
Public Property ouString As String
    Get
        Return _ouString
    End Get
    Set(value As String)
        _ouString = value
    End Set
End Property

<Description("domainString"), DisplayName("Domain String"), Category("Data")>
Public Property domainString As String
    Get
        Return _domainString
    End Get
    Set(value As String)
        _domainString = value
    End Set
End Property
Private Sub button_Click(sender As Object, e As RoutedEventArgs) Handles button.Click
    Me.Visibility = Visibility.Hidden
End Sub

Public Sub loadGroups()
    grouplistBox.Items.Clear()
    Dim groupCTX As PrincipalContext = ADTools.getConnection(domainString, ouString)
    Dim gList As List(Of GroupPrincipal) = ADTools.getManagedGroups(groupCTX)
    Dim gsList As New List(Of String)
    For Each grp As GroupPrincipal In gList
        If Not (grp.DistinguishedName.Contains("Staff Groups") Or grp.DistinguishedName.Contains("Subject Groups") Or grp.DistinguishedName.Contains("Tutor Groups")) Then
            gsList.Add(grp.DisplayName)
        End If
    Next

    'For n As Integer = 1 To 70
    '    grouplistBox.Items.Add("item" & n)
    'Next

    gsList.Sort()
    For Each grp As String In gsList
        grouplistBox.Items.Add(grp)
    Next
End Sub

Private Sub addButton_Click(sender As Object, e As RoutedEventArgs) Handles addButton.Click
    Dim ret As New List(Of String)
    For Each grp In grouplistBox.SelectedItems
        ret.Add(grp.ToString)
    Next
    RaiseEvent addClicked(ret)
End Sub