C# 父滚动查看器';滚动已更改';通过子列表框触发事件';卷轴

C# 父滚动查看器';滚动已更改';通过子列表框触发事件';卷轴,c#,wpf,events,scrollview,parent-child,C#,Wpf,Events,Scrollview,Parent Child,我在滚动查看器中有一个列表框。Scroll Viewer已附加一个Scroll Changed listener,我在其中放置了一个: MessageBox.Show("Something Happened!"); 以下是我的WPF代码: <ScrollViewer ScrollChanged="ScrollViewer_ScrollChanged" VerticalScrollBarVisibility="Disabled" HorizontalScrollBarVis

我在滚动查看器中有一个列表框。Scroll Viewer已附加一个Scroll Changed listener,我在其中放置了一个:

MessageBox.Show("Something Happened!");
以下是我的WPF代码:

        <ScrollViewer ScrollChanged="ScrollViewer_ScrollChanged" VerticalScrollBarVisibility="Disabled" HorizontalScrollBarVisibility="Disabled">
                <ListBox>
                    <ListBox.Items>
                        <ListBoxItem Content="item 2"/>
                        <ListBoxItem Content="item 2"/>
                        <ListBoxItem Content="item 2"/>
                        <ListBoxItem Content="item 2"/>
                        <ListBoxItem Content="item 2"/>
                        <ListBoxItem Content="item 2"/>
                        <ListBoxItem Content="item 2"/>
                        <ListBoxItem Content="item 2"/>
                        <ListBoxItem Content="item 2"/>
                        <ListBoxItem Content="item 2"/>
                        <ListBoxItem Content="item 2"/>
                        <ListBoxItem Content="item 2"/>
                        <ListBoxItem Content="item 2"/>
                        <ListBoxItem Content="item 2"/>
                    </ListBox.Items>
                </ListBox>
        </ScrollViewer>

现在的问题是,当我滚动列表框时,ScrollViewer的“ScrollChanged”事件会通过向我显示MessageBox=>发生了什么事情而触发

我尝试过启用或禁用水平滚动条,但同样的事情发生了。。。 我的垂直滚动条现在被禁用,我将其设置为“隐藏”,但现在它也隐藏了ListBox的垂直滚动条,我也无法通过鼠标滚轮滚动ListBox

先谢谢你 发生这种情况是因为它是一个。具体地说,它是一个冒泡事件,这意味着当它被引发时,它会沿着可视化树(从引发它的更深的元素,向上到根)查找处理程序

这使您可以执行以下操作:

<ListBox ScrollViewer.ScrollChanged="listBox_ScrollChanged"/>

您好,我不明白问题是什么,您正在收听一个滚动事件,您不希望代码在此事件上触发?我不希望代码触发ListBox的滚动更改事件。事件被分配给外部滚动查看器,因此,它应该仅在我们滚动父滚动查看器时触发代码,而不是滚动内部ListBox时触发代码。我们可以使用(发送方作为滚动查看器)==外部滚动查看器吗?它也以相反的方式工作。。。我检查了OutsideScrollViewer的滚动更改事件中的引用。。。
//Assuming the ScrollViewer you want to listen to is given the name "OutsideScrollViewer"

private void ScrollViewer_ScrollChanged(object sender, ScrollChangedEventArgs e)
{
    if (object.ReferenceEquals(e.Source,  OutsideScrollViewer))
    {

    }
}