首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从FlowDocumentScrollViewer到ListView的气泡滚动事件

从FlowDocumentScrollViewer到ListView的气泡滚动事件
EN

Stack Overflow用户
提问于 2021-01-29 09:17:32
回答 2查看 164关注 0票数 1

我有以下(部分) XAML:

代码语言:javascript
复制
    <ListView x:Name="logView" Grid.Row="2" ItemsSource="{Binding Logs}"
                               ScrollViewer.HorizontalScrollBarVisibility="Disabled">
    <ListView.ItemTemplate>
        <DataTemplate>
            <FlowDocumentScrollViewer ScrollViewer.VerticalScrollBarVisibility="Disabled"
                                      ScrollViewer.HorizontalScrollBarVisibility="Disabled">
                <FlowDocument FontSize="12" FontFamily="Calibri" PagePadding="0" TextAlignment="Left">
                    <Paragraph TextIndent="-10" Margin="10,0,0,0">
                        <Run Text="{Binding .}" />
                    </Paragraph>
                </FlowDocument>
            </FlowDocumentScrollViewer>
        </DataTemplate>
    </ListView.ItemTemplate>
</ListView>

LogsListView绑定的IEnumerable<string> (通过ViewModel,但这在这里不重要)。

如果我删除了整个<ListView.ItemTemplate>...</ListView.ItemTemplate>,我就有了鼠标滚轮滚动的行为。但是有了FlowDocumentScrollViewer和它的内容,滚动不再那么顺利了。它仍然滚动,但只是偶尔,大部分时间它被卡住了。

为了解决这个问题,我遵循了this解决方案,并在代码背后创建了一个PreviewMouseWheel处理程序。

代码语言:javascript
复制
private void BubbleScrollingToLogView(object sender, MouseWheelEventArgs e)
{
    if (!e.Handled)
    {
        e.Handled = true;
        var eventArg = new MouseWheelEventArgs(e.MouseDevice, e.Timestamp, e.Delta);
        eventArg.RoutedEvent = MouseWheelEvent;
        eventArg.Source = sender;
        logView.RaiseEvent(eventArg);
    }
}

并将其添加到XAML中:

代码语言:javascript
复制
....
<FlowDocumentScrollViewer ScrollViewer.VerticalScrollBarVisibility="Disabled"
                          ScrollViewer.HorizontalScrollBarVisibility="Disabled"
                          PreviewMouseWheel="BubbleScrollingToLogView">
....

但它并没有改变任何行为。我甚至尝试将PreviewMouseWheel="BubbleScrollingToLogView"添加到<FlowDocument><Paragraph>中,假设它们也可能捕捉到事件。但什么都帮不上忙。

因此,我需要做什么才能获得ListView**?** 的平滑、默认滚动行为?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-02-11 12:14:53

禁用FlowDocumentScrollViewer以获得默认滚动行为就足够了。由于禁用,我没有注意到外观上有任何不同。

代码语言:javascript
复制
<FlowDocumentScrollViewer ScrollViewer.VerticalScrollBarVisibility="Disabled"
                          ScrollViewer.HorizontalScrollBarVisibility="Disabled"
                          IsEnabled="False">
票数 0
EN

Stack Overflow用户

发布于 2021-02-03 15:44:11

如果决定仅使用FlowDocumentScrollViewer,则可以将Document属性绑定到视图模型上的属性。

代码语言:javascript
复制
<FlowDocumentScrollViewer Document="{Binding Document}" ScrollViewer.HorizontalScrollBarVisibility="Disabled">
</FlowDocumentScrollViewer>

在视图模型中,定义Document类型的FlowDocument属性。

代码语言:javascript
复制
private FlowDocument document;
public FlowDocument Document
{
    get { return document; }
    set
    {
        document = value;
        OnPropertyChanged();
    }
}

FlowDocument创建Logs

代码语言:javascript
复制
var doc = new FlowDocument();
doc.FontSize = 12;
doc.FontFamily = new FontFamily("Calibri");
doc.PagePadding = new Thickness(0);
doc.TextAlignment = TextAlignment.Left;
foreach (var log in Logs)
{
    var paragraph = new Paragraph(new Run(log));
    paragraph.TextIndent = -10;
    paragraph.Margin = new Thickness(10, 0, 0, 0);
    doc.Blocks.Add(paragraph);
}
Document = doc;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65951714

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档