标签: scrollviewer

在 WPF Scrollviewer 中的 Textbox 控件上启用滑动滚动

我们正在 WPF 中开发触摸应用程序。我们的 ScrollViewers 将属性 PanningMode 设置为 Both 以启用滑动滚动。当在空白区域甚至在 CheckBox 和 ComboBox 控件上滑动时,此功能效果很好。

但是,当在文本框上滑动(将手指短暂地放在文本框上并向上或向下移动)时,ScrollViewer 不会滚动。有没有办法在所有控件上启用滑动滚动并仅将它们集中在点击上?

可以使用以下代码重现此行为:

<Window x:Class="WpfSandbox.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">

    <ScrollViewer PanningMode="Both">
        <StackPanel>
            <TextBox Margin="5"></TextBox>
            <TextBox Margin="5"></TextBox>
            <TextBox Margin="5"></TextBox>
            <TextBox Margin="5"></TextBox>
            <TextBox Margin="5"></TextBox>
            <TextBox Margin="5"></TextBox>
            <TextBox Margin="5"></TextBox>
            <TextBox Margin="5"></TextBox>
            <CheckBox Margin="5" />
            <CheckBox Margin="5" />
            <CheckBox Margin="5" />
            <CheckBox Margin="5" />
            <CheckBox Margin="5" />
            <CheckBox Margin="5" />
            <CheckBox Margin="5" />
            <CheckBox Margin="5" />
            <ComboBox Margin="5" />
            <ComboBox Margin="5" />
            <ComboBox Margin="5" />
            <ComboBox Margin="5" />
            <ComboBox Margin="5" …
Run Code Online (Sandbox Code Playgroud)

c# wpf scrollviewer touch

3
推荐指数
1
解决办法
4403
查看次数

如何检测 ScrollViewer 何时完成滚动?

顺便说一句,我正在使用 UWP 以防万一。所以我使用的是 ListView 并且默认情况下所有 ListView 都有一个 ScrollViewer 附加到它们(在默认模板中)。问题是我找不到在 ListView 完成滚动时触发的事件(在 ListView 本身或其 ScrollViewer 上)。

我使用 scrollViewer.ChangeView() 方法自动滚动到 ListView 的开头,它使用动画滚动到顶部,所以我认为这与它有关,因为 ViewChanged 事件在动画完成之前触发。如果我对此是正确的,那么必须有一种方法来确定动画是否完成,因为我需要在 ListView 再次完全空闲时收到警报,这仅是在滚动动画完成时。谢谢。

c# xaml listview scrollviewer uwp

3
推荐指数
1
解决办法
348
查看次数

WPF ScrollToTop 与 ScrollToHome

我想知道ScrollViewer.ScrollToHome()和之间的实际区别是什么ScrollViewer.ScrollToTop()。他们是一样的吗?

两者的文档说:

垂直滚动到 ScrollViewer 内容的开头。

我认为在 .NET Framework 中使用不同名称的两种方法做同样的事情是非常不寻常的。是吗?

.net c# wpf scrollviewer

3
推荐指数
1
解决办法
148
查看次数

Silverlight ItemsControl垂直滚动条,使用wrappanel作为ControlTemplate

我有一个元素集合,每个元素都有一个名称和一个图像blob的子集合.我想显示一个Accordion,每个项目代表每个MainElements.在每个元素内部,我在所述MainElement的子集合中显示图像.Accordion会被用户调整大小,因此我使用了一个wrappanel来呈现图像.当手风琴足够宽时,图像重新排序,每个排列的数量与每行中的可能性一致.当wrappanel每行只显示一个图像时会出现问题(因为没有足够的空间可供更多),图像列表会继续,但我看不到所有图像,因为它们不适合控件的高度.我需要在AccordionItem内显示一个垂直滚动条,以便我可以向下滚动图像列表.所以,这是我的代码:

<layoutToolkit:Accordion Width="Auto" Height="Auto" ItemsSource="{Binding MainElementCollection}">
    <layoutToolkit:Accordion.ItemTemplate>
        <DataTemplate>
            <TextBlock Text="{Binding MainElementName}" />
        </DataTemplate>
    </layoutToolkit:Accordion.ItemTemplate>
    <layoutToolkit:Accordion.ContentTemplate>
        <DataTemplate>
            <ItemsControl ItemsSource="{Binding SubElementCollection}" ScrollViewer.VerticalScrollBarVisibility="Auto" >
                    <ItemsControl.Template>
                        <ControlTemplate>
                            <controlsToolkit:WrapPanel />
                        </ControlTemplate>
                    </ItemsControl.Template>
                    <ItemsControl.ItemTemplate>
                        <DataTemplate>
                            <Grid>
                                <Image Margin="2" Width="150" Source="{Binding PreviewImage, Converter={StaticResource ImageConverter}}" />
                            </Grid>
                        </DataTemplate>
                    </ItemsControl.ItemTemplate>
                </ItemsControl>
        </DataTemplate>
    </layoutToolkit:Accordion.ContentTemplate>
</layoutToolkit:Accordion>
Run Code Online (Sandbox Code Playgroud)

http://www.silverlightshow.net/tips/How-to-add-scrollbars-to-ItemsControl.aspx建议我应该用一个scrollviewer环绕我的wrappanel,就像这样

                <ItemsControl.Template>
                    <ControlTemplate>
                        <scrollviewer>
                        <controlsToolkit:WrapPanel />
                        </scrollviewer>
                    </ControlTemplate>
                </ItemsControl.Template>
Run Code Online (Sandbox Code Playgroud)

但是后来我的包装变得非常小,我只能看到一个小的垂直滚动条任何想法?非常感谢.

编辑:我认为当在controltemplate中使用时,wrappanel会失去其宽度

它应该如下使用:

                               <ItemsControl.ItemsPanel>
                                    <ItemsPanelTemplate>
                                            <controlsToolkit:WrapPanel ScrollViewer.VerticalScrollBarVisibility="Visible" />
                                    </ItemsPanelTemplate>
                                </ItemsControl.ItemsPanel>
Run Code Online (Sandbox Code Playgroud)

无论如何,我尝试添加ScrollViewer.VerticalScrollBarVisibility ="Visible"行,但我又被卡住了.

再次编辑:

现在我的包装袋看起来像这样:

                    <ItemsControl ItemsSource="{Binding StageVideos}">
                        <ItemsControl.ItemsPanel>
                            <ItemsPanelTemplate>
                                    <controlsToolkit:WrapPanel />
                            </ItemsPanelTemplate>
                        </ItemsControl.ItemsPanel>
                        <ItemsControl.ItemTemplate>
                            <DataTemplate> …
Run Code Online (Sandbox Code Playgroud)

silverlight wrappanel itemtemplate itemscontrol scrollviewer

2
推荐指数
1
解决办法
1万
查看次数

更改"画布"内控件的位置后,ScrollBars不可见

我创建了一个继承自WPF的自定义画布控件Canvas.我在主窗口中使用它 -

<ScrollViewer
    HorizontalScrollBarVisibility="Auto"
    VerticalScrollBarVisibility="Auto">
    <RTD:RTDesignerCanvas
        Margin="5"
        Background="White"
        x:Name="canvas1"
        Focusable="True"
        AllowDrop="True">
    </RTD:RTDesignerCanvas>
</ScrollViewer>
Run Code Online (Sandbox Code Playgroud)

一切正常,但是当我尝试像这样设置控件的位置时

Canvas.SetTop(item, 200);

滚动条不可见,控件隐藏在某处.有趣的是,如果我向其添加另一个控件滚动条是可见的,我可以向下滚动以查看上一个控件.

我试着用

base.InvalidateVisual();
base.UpdateLayout();
base.InvalidateArrange();
Run Code Online (Sandbox Code Playgroud)

更换物品后TopLeft没有任何反应; 我错过了什么或者由于某些错误而发生这种情况?

更新:

澄清,说我有有它的画布width,height100,100.现在,如果我用移动的控制(在画布上已添加),Canvas.SetLeft(myControl, 200)然后它会移动到这是默认情况下不可见,并且滚动条也被禁止的位置,所以没有办法看到那种控制.

现在,如果我向Canvas添加另一个控件,ScrollBars会正确显示,我可以通过滚动查看上一个控件.

.net wpf canvas custom-controls scrollviewer

2
推荐指数
1
解决办法
4386
查看次数

Scrollviewer问题wpf

我在列表框中显示图像.我已将此列表框放在scrollviewer中.我使用两个重复按钮来移动列表框项目.我使用datacontext绑定列表框.

问题:

如果我使用按钮移动图像并单击lisbox中的图像,它将移动到初始位置.

码:

   <RepeatButton Click="rbtnLeft_Click" Name="rbtnLeft" Width="30" Height="30">
                <Image Source="Images/GeneralImages/search_right_arrow.jpg"></Image>
            </RepeatButton>
            <Grid  x:Name="grid"  Width="666" HorizontalAlignment="Left">
                <ScrollViewer Grid.Row="1" Name="svGame"
                VerticalScrollBarVisibility="Hidden" 
                HorizontalScrollBarVisibility="Hidden"  >
                    <ListBox ClipToBounds="True" Name="lbGameImage" Width="Auto" SelectionChanged="lbGameImage_SelectionChanged" ItemsSource="{Binding}"   ItemsPanel="{DynamicResource iptListBox}" ItemContainerStyle="{DynamicResource ListBoxItemStyle}"
              ScrollViewer.VerticalScrollBarVisibility="Hidden" 
              ScrollViewer.HorizontalScrollBarVisibility="Hidden"/>
                </ScrollViewer>                                       
            </Grid>
            <RepeatButton Click="rbtnRight_Click" Name="rbtnRight" Width="30" Height="30">
                <Image Source="Images/GeneralImages/search_left_arrow.jpg"></Image>
            </RepeatButton>
Run Code Online (Sandbox Code Playgroud)

c#代码:

private void rbtnLeft_Click(object sender, RoutedEventArgs e)
    {
        svGame.ScrollToHorizontalOffset(svGame.HorizontalOffset + 5);
    }

    private void rbtnRight_Click(object sender, RoutedEventArgs e)
    {
        svGame.ScrollToHorizontalOffset(svGame.HorizontalOffset - 5);
    }
Run Code Online (Sandbox Code Playgroud)

c# wpf scrollviewer horizontaloffset

2
推荐指数
1
解决办法
2770
查看次数

滚动到列表框wp7的底部

我有很多项目(0-100)最终需要滚动到包含它的Listbox的底部.我试过:

ScrollViewer.SetVerticalScrollBarVisibility(listmy, ScrollBarVisibility.Auto);
            listmy.SelectedItem =  listmy.Items.Count-1;
            listmy.ScrollIntoView(listmy.SelectedItem);
            ScrollViewer.SetVerticalScrollBarVisibility(listmy, ScrollBarVisibility.Disabled);
Run Code Online (Sandbox Code Playgroud)

但是这对我不起作用.scrollviewer包装了列表框和文本框.(列表框垂直滚动处于禁用状态).UPD xaml:

<Grid>

    <ScrollViewer Name="_ScrollViewer" VerticalScrollBarVisibility="Auto">
        <StackPanel Name="stackPanel" Height="auto">
          <ListBox ScrollViewer.VerticalScrollBarVisibility="Disabled"  x:Name="listmy">
            <ListBox.ItemTemplate>
              <DataTemplate>...
Run Code Online (Sandbox Code Playgroud)

和cs:

listmy.ItemsSource = ((App)Application.Current).DIALOG;
        ScrollViewer.SetVerticalScrollBarVisibility(listmy, ScrollBarVisibility.Auto);
        listmy.SelectedIndex =  listmy.Items.Count-1;
        listmy.ScrollIntoView(listmy.SelectedItem);
        ScrollViewer.SetVerticalScrollBarVisibility(listmy, ScrollBarVisibility.Disabled);
Run Code Online (Sandbox Code Playgroud)

c# silverlight listbox scrollviewer windows-phone-7

2
推荐指数
1
解决办法
6387
查看次数

ListBox知道它在一些遥远的ScrollViewer中吗?

下面的代码是问题的完整表示.基本上,当我在ScrollViewer中有一个ListBox时,ListBox将不会显示自己的滚动条.相反,它依赖于父ScrollViewer的滚动条.在我的情况下,我将整个控件包装在ScrollViewer中,以便在违反MinHeight/MinWidth时获取滚动条.ListBox只是我的UserControl中的众多控件之一,我不希望我的UserControl跳转到大比例以匹配ListBox中的项目.你会在下面的代码中添加什么来强制ListBox使用自己的滚动条?

using System;
using System.Windows;
using System.Windows.Controls;

namespace TestExpanderWidth
{
    class Program
    {
        [STAThread]
        static void Main()
        {
            var listbox = new ListBox { Margin = new Thickness(10.0), MinWidth = 400 };
            listbox.Items.Add(new string('c', 3000));

            var sv = new ScrollViewer {HorizontalScrollBarVisibility = ScrollBarVisibility.Auto, VerticalScrollBarVisibility = ScrollBarVisibility.Auto};
            sv.Content = listbox; // remove for test

            var window = new Window { Width = 600, Height = 400 };
            window.Content = sv; // remove for test
            //window.Content = listbox; // add for test …
Run Code Online (Sandbox Code Playgroud)

c# wpf layout listbox scrollviewer

2
推荐指数
1
解决办法
424
查看次数

与scrollviewer和minWidth结合使用时,gridsplitter的行为不符合预期

  • 我有一个网格作为背景容器
  • 此网格包含一个scrollviewer,因此当我调整窗口向上的大小时,内容随之扩展,但是当我调整窗口向下的大小时,当我到达sv内容的minWidth时,滚动条将出现在scrollviewer上
  • 此scrollviewer包含具有两列的网格
  • 此网格在每一列中包含一个scrollviewer,每个滚动视图又包含一个网格。
  • 我在第一列上有一个网格拆分器,以便可以调整列的大小

免责声明:我知道这不是组织此布局的最佳方法,但这实际上是我发现的最简单的表示形式,它再现了我在更为精细的布局中遇到的问题,因此请不要提供会重新组织图层的解决方案

这是xaml:

<Window x:Class="Test.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="Text Project">

    <!--background grid-->
    <Grid>

        <ScrollViewer VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Auto">

            <!--two columns layout-->
            <Grid MinWidth="600">
                <Grid.ColumnDefinitions>
                    <ColumnDefinition />
                    <ColumnDefinition />
                </Grid.ColumnDefinitions>

                <ScrollViewer VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Auto">
                    <Grid MinWidth="200" Background="Red"/>
                </ScrollViewer>

                <GridSplitter HorizontalAlignment="Right" VerticalAlignment="Stretch" Width="6"/>

                <ScrollViewer Grid.Column="1" VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Auto">
                    <Grid MinWidth="200" Background="Blue"/>
                </ScrollViewer>
            </Grid>

        </ScrollViewer>

    </Grid>

</Window>
Run Code Online (Sandbox Code Playgroud)

目标如下:-如果我将窗口调大,一切都会缩放-如果我调小,当我达到minWidth时,最顶部的滚动查看器上的scroolbar出现,并且其内容停止缩小。(这部分工作正常)-不管最顶部的scrollviewer的大小如何,我都可以使用gridsplitter调整两列的大小-当我达到一列的最小宽度时,滚动条将出现在该列的scrollviewer上,并且其内容停止缩小

问题:第二部分永远不会发生。我得到的是可以调整大小,直到达到两个子网格的minWidth之一,然后网格分割器停止移动,无法进一步缩小并且滚动条永远不会出现。

我注意到,如果删除最上面的网格及其关联的scrollviewer,它将按预期工作:

<Window x:Class="Test.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="Text Project">

            <!--two columns layout-->
            <Grid MinWidth="600">
                <Grid.ColumnDefinitions>
                    <ColumnDefinition />
                    <ColumnDefinition />
                </Grid.ColumnDefinitions>

                <ScrollViewer VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Auto">
                    <Grid MinWidth="200" Background="Red"/> …
Run Code Online (Sandbox Code Playgroud)

wpf scrollviewer gridsplitter

2
推荐指数
1
解决办法
1969
查看次数

如何在UWP应用程序中使ScrollView水平滚动?

在这里开发一个Windows 10 UWP(通用Windows平台)应用程序......我有一个很长的文本,我不想把它包装成几行.我希望它很长,以便最终用户可以水平滚动以在一行中查看整个文本.

    <ScrollViewer HorizontalScrollMode="Enabled" Width="Auto">

<TextBlock Text="This is a long text that I don't want it to be wrapped in multiple lines. I want it to be horizontally long so the user can horizontally scroll to see the text"

Margin="50, 50, 0, 0"></TextBlock>

</ScrollViewer>
Run Code Online (Sandbox Code Playgroud)

但是当我运行应用程序时,文本在右边缘被切断,我不能水平滚动它以查看文本的其余部分.有没有办法使用带有一些附加属性的ScrollView来实现?这是应用程序外观的屏幕截图.

在此输入图像描述

scrollviewer uwp

2
推荐指数
1
解决办法
6149
查看次数