标签: scrollviewer

如何让我的ScrollViewer滚动视图区域?

我有一个一个内部的ScrollViewer一个内部边境一个内部的StackPanel一个内部窗口.

ScrollViewer 在右侧放置一个滚动条,但它不可滚动.

如何让ScrollViewer使其内容可滚动?

替代文字http://www.deviantsart.com/upload/1bl34e1.png

<Window x:Class="TestScroll234343.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="Window1" Height="150" Width="300">
    <StackPanel>
    <!--<StackPanel Height="150"> doesn't work either-->
        <Border>
            <ScrollViewer>            
                <Grid>
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="Auto"/>
                    </Grid.ColumnDefinitions>
                    <Grid.RowDefinitions>
                        <RowDefinition Height="Auto"/>
                        <RowDefinition Height="Auto"/>
                        <RowDefinition Height="Auto"/>
                        <RowDefinition Height="Auto"/>
                        <RowDefinition Height="Auto"/>
                        <RowDefinition Height="Auto"/>
                        <RowDefinition Height="Auto"/>
                        <RowDefinition Height="Auto"/>
                        <RowDefinition Height="Auto"/>
                        <RowDefinition Height="Auto"/>
                    </Grid.RowDefinitions>

                    <TextBlock Grid.Row="0" Grid.Column="0" Text="Row0"/>
                    <TextBlock Grid.Row="1" Grid.Column="0" Text="Row1"/>
                    <TextBlock Grid.Row="2" Grid.Column="0" Text="Row2"/>
                    <TextBlock Grid.Row="3" Grid.Column="0" Text="Row3"/>
                    <TextBlock Grid.Row="4" Grid.Column="0" …
Run Code Online (Sandbox Code Playgroud)

wpf grid xaml scrollviewer

6
推荐指数
1
解决办法
6735
查看次数

如何链接滚动条和滚动查看器

我目前有两个ScrollViewer包含同一集合的备用视图.我通过处理ScrollChanged事件并使用ScrollToVerticalOffset将两个滚动查看器的滚动绑定在一起.

出于演示原因,我已将ScrollViewer滚动条设置为隐藏,并希望从单独的ScrollBar控制它们.

这似乎并不简单.我记得几个月前看到一篇关于它的博客,但我再也找不到了.

任何人都可以向我指出一些有用的资源,或者给我一个正确的方向来推动它如何实现.

提前致谢.

wpf scrollbar scrollviewer

6
推荐指数
2
解决办法
7211
查看次数

滚动和拉伸扩展器的内容

这就是我要的:

1.)当我单击我的Expander按钮并展开它时,它应该延伸到Grid的末尾

见样本图像=> 替代文字

2.)当我在Expander ScrollBars中的RichTextBox中写入更多文本而不是空格时,必须可见,我应该能够向下滚动.

将滚动查看器放在Expander内容周围并不难,但即使设置"自动"它们也永远不会出现也无济于事.将滚动查看器设置为"可见"我无法滚动,因为扩展器的内容无休止地下降.

这是我的示例代码:

<Grid Margin="30,0,0,0">
        <Grid.RowDefinitions>
            <RowDefinition Height="30" />
            <RowDefinition Height="*" />
            <RowDefinition Height="30" />
        </Grid.RowDefinitions>
        <StackPanel Background="LightCoral" Orientation="Horizontal">

            <TextBlock Grid.Column="0" Text="Incident type:" VerticalAlignment="Center" />
            <ComboBox  Grid.Column="1"  IsEditable="True" Margin="0,7" Text="{Binding SelectedIncidentReport.IncidentType,Mode=TwoWay}" />

            <TextBlock Grid.Column="0" Grid.Row="1" Text="Teachers name:" VerticalAlignment="Center" />
            <TextBox Grid.Column="1" Grid.Row="1" Height="25" Text="{Binding SelectedIncidentReport.TeacherName,Mode=TwoWay}" />

            <TextBlock Grid.Column="0" Grid.Row="2" Text="Tutor group:" VerticalAlignment="Center" />
            <TextBox Grid.Column="1" Grid.Row="2" Margin="0,7" Text="{Binding SelectedIncidentReport.TutorGroup,Mode=TwoWay}" />
        </StackPanel>

        <Grid Background="LightBlue" Grid.Row="1" >
            <Grid.RowDefinitions>
                <RowDefinition Height="Auto" />
                <RowDefinition Height="Auto" />
                <RowDefinition Height="Auto" />
                <RowDefinition …
Run Code Online (Sandbox Code Playgroud)

wpf scroll expander scrollviewer stretch

6
推荐指数
1
解决办法
4136
查看次数

WPF Scrollviewer 滚动到鼠标位置

我正在研究一个图像查看器控件,该控件由滚动查看器内的图像组成。为了缩放,我在图像的 layouttransform 中使用了 scaletransform。Zoomin 在鼠标点击时发生。如果用户单击图像,我希望鼠标位置的像素位于滚动查看器可视区域的中心。为了实现这一点,我想修改滚动查看器的偏移量,但我不确定如何计算将像素置于鼠标指针下方的正确偏移量。

这里描述了如何将滚动条保持在它们的相对位置。这工作正常,但不是我正在寻找的。

你如何正确计算偏移量?

这是我的一些代码:

xml:

<ScrollViewer Margin="5" Name="scrvImagePanel" VerticalAlignment="Stretch" 
                  CanContentScroll="True"
                  DockPanel.Dock="Left" 
                  HorizontalAlignment="Stretch" 
                  HorizontalContentAlignment="Stretch"
                  HorizontalScrollBarVisibility="Auto" 
                  VerticalContentAlignment="Stretch" 
                  VerticalScrollBarVisibility="Auto"
                  Background="{StaticResource {x:Static SystemColors.ControlDarkBrushKey}}"
                  ScrollChanged="OnScrollChanged">
        <Image Name="imgPicture"
               MouseUp="imgMouseUp" 
               Stretch="None"
               HorizontalAlignment="Left" 
               VerticalAlignment="Top" 
               >
            <Image.LayoutTransform>
                <TransformGroup>
                <ScaleTransform x:Name="imgZoomTransform" ScaleX="1" ScaleY="1"></ScaleTransform>
                </TransformGroup>
            </Image.LayoutTransform>                
        </Image>
    </ScrollViewer>
Run Code Online (Sandbox Code Playgroud)

和代码:

private void imgMouseUp(object sender, MouseButtonEventArgs e)
{
   Point absScreenPos = e.GetPosition(imgPicture);

    //calculate the new zoom factor
    this.ZoomFactor = imgZoomTransform.ScaleX;
    if (e.ChangedButton == MouseButton.Right)
    {
      this.ZoomFactor /= 2.0;
    }
    else if (e.ChangedButton == MouseButton.Left)
    {
      this.ZoomFactor *= 2.0; …
Run Code Online (Sandbox Code Playgroud)

wpf image scrollviewer offset

6
推荐指数
1
解决办法
5273
查看次数

当用户在页面之间导航时,在Windows Phone 8.1中保存滚动状态

我在导航Helper类的页面之间导航,VS 2013在解决方案创建时添加了,但滚动状态大多数控件(如Pivot,Hub)都没有像Windows Phone 8.x Silverlight那样保存.

我应该怎么做才能实现这种行为?我应该自己处理滚动状态并在访问访问页面时恢复滚动吗?

谢谢.

UPDATE1:

当我回到页面时,我需要保存选定的枢轴/中心项目等.

UPDATE2:

    void navigationHelper_SaveState(obj sender,SaveStateEventArgs e)
    {
    e.PageState["SelectedSection"] = MainHub.SectionsInView;
    }
    void navigationHelper_LoadState(obj sender,LoadStateEventArgs e)        
    {
        if (e.PageState != null)
        {
            var sections = e.PageState["SelectedSection"] as IList<HubSection>;
            if (sections != null && sections.Any())
                MainHub.ScrollToSection(sections[0]);
        }
    }
Run Code Online (Sandbox Code Playgroud)

scrollviewer windows-phone-8.1

6
推荐指数
1
解决办法
1069
查看次数

无法在ScrollViewer中滚动TreeView

我在ScrollViewer中有一个TreeView。当我在treeview上转动鼠标滚轮,treeview不会滑动并且停留在同一点。但是,当我移动滚动条时,可以滑动树形视图。

我很确定treeview有一个scrollviewer,但是我的意思是要使用另一个scrollviewer,我有一个scrollviwer模板,并且在整个应用程序中都使用了这个模板。这就是为什么我要再次使用此模板。

这是代码:

<ScrollViewer Template="{DynamicResource AppleStyleScrollBarStyle}">
    <TreeView>
        <TreeViewItem Header="TreeViewItem"/>
        <TreeViewItem Header="TreeViewItem"/>
        <TreeViewItem Header="TreeViewItem"/>
        <TreeViewItem Header="TreeViewItem"/>
      </TreeView>
</ScrollViewer>
Run Code Online (Sandbox Code Playgroud)

wpf treeview scrollviewer

6
推荐指数
2
解决办法
3028
查看次数

计算水平偏移以将ListView滚动到SelectedItem的中心

我正在构建一个照片应用程序,使用a FlipView和a listView作为分页.当我点击它中的缩略图时,ListView它显示了我的相同图片FlipView.当我滑入时FlipView,所选的任何照片都会选择相同的照片ListView.这是通过添加到它们两个来完成的:

ListView:

SelectedIndex="{Binding Path=SelectedIndex, ElementName=flipView1, Mode=TwoWay}
Run Code Online (Sandbox Code Playgroud)

对于FlipView:

SelectedIndex="{Binding Path=SelectedIndex, ElementName=listView1, Mode=TwoWay}
Run Code Online (Sandbox Code Playgroud)

对于ListView SelectionChanged我添加的事件:

 if (e.AddedItems.Count > 0)
        listView1.ScrollIntoView(e.AddedItems.First(), ScrollIntoViewAlignment.Leading);
Run Code Online (Sandbox Code Playgroud)

我唯一的问题是,当我滑动时FlipView,所选的图片被选中,ListView但是ScrollViewer没有滚动到它.我尝试WinRTXamlToolkit用来改变以下位置ScrollViewer:

private void pageRoot_Loaded()
        {
            // count number of all items
            int itemCount = this.listView1.Items.Count;
            if (itemCount == 0)
                return;

            if (listView1.SelectedIndex >= itemCount)
                listView1.SelectedIndex = itemCount - 1;

            // calculate x-posision of …
Run Code Online (Sandbox Code Playgroud)

c# listview scrollviewer windows-store-apps windows-8.1

6
推荐指数
1
解决办法
1810
查看次数

如何仅使用xaml在scrollviewer中设置滚动条的边距

我需要在滚动查看器中设置滚动条的边距.我尝试在默认的scrollviewer样式中重写滚动条边距.只需修改样式中的边距,滚动条magin设置正确的值.但滚动条移动时,scrollviewer中的内容会保持静态.我该如何修复它还是有另一种方法来设置scrollviewer中滚动条的余量更容易吗?

<Style TargetType="ScrollViewer">
  <Setter Property="HorizontalContentAlignment" Value="Left" />
  <Setter Property="VerticalContentAlignment" Value="Top" />
  <Setter Property="VerticalScrollBarVisibility" Value="Visible" />
  <Setter Property="Padding" Value="4"/>
  <Setter Property="BorderThickness" Value="1"/>
  <Setter Property="BorderBrush">
      <Setter.Value>
          <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
              <GradientStop Color="#FFA3AEB9" Offset="0"/>
              <GradientStop Color="#FF8399A9" Offset="0.375"/>
              <GradientStop Color="#FF718597" Offset="0.375"/>
              <GradientStop Color="#FF617584" Offset="1"/>
          </LinearGradientBrush>
      </Setter.Value>
  </Setter>
  <Setter Property="Template">
      <Setter.Value>
          <ControlTemplate TargetType="ScrollViewer">
              <Border CornerRadius="2" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}">
                  <Grid Background="{TemplateBinding Background}">
                      <Grid.RowDefinitions>
                          <RowDefinition Height="*"/>
                          <RowDefinition Height="Auto"/>
                      </Grid.RowDefinitions>
                      <Grid.ColumnDefinitions>
                          <ColumnDefinition Width="*"/>
                          <ColumnDefinition Width="Auto"/>
                      </Grid.ColumnDefinitions>

                      <ScrollContentPresenter x:Name="ScrollContentPresenter"
                                              Cursor="{TemplateBinding Cursor}"
                                              Margin="{TemplateBinding Padding}"
                                              ContentTemplate="{TemplateBinding ContentTemplate}"/>

                      <Rectangle Grid.Column="1" Grid.Row="1" Fill="#FFE9EEF4"/> …
Run Code Online (Sandbox Code Playgroud)

c# wpf xaml scrollbar scrollviewer

6
推荐指数
1
解决办法
4938
查看次数

恢复ListView状态MVVM

当使用MVVM时,我们正在处理视图(而viewmodel仍然存在).

我的问题是如何在ListView视图处理时尽可能接近创建新视图时恢复状态?

ScrollIntoView部分工作.我只能滚动到单个项目,它可以在顶部或底部,无法控制项目在视图中的显示位置.

有多选(和水平滚动条,但这是相当不重要的),有人可能会选择几个项目,也许可以进一步滚动(不改变选择).

理想情况下ScrollViewer,ListView属性与视图模型的绑定可以做到,但我担心直接要求这个问题(不确定是否适用).此外,在我看来这对于wpf来说是一个非常普遍的事情,但也许我没有正确地制定谷歌查询,因为我找不到相关的ListView+ ScrollViewer+ MVVM组合.

这可能吗?


我有ScrollIntoView和数据模板(MVVM)的问题相当丑陋的变通方法.恢复声音错误的ListView状态ScrollIntoView.应该有另一种方式.今天谷歌引导我到我自己未回答的问题.


我正在寻找恢复ListView状态的解决方案.考虑以下作为mcve:

public class ViewModel
{
    public class Item
    {
        public string Text { get; set; }
        public bool IsSelected { get; set; }

        public static implicit operator Item(string text) => new Item() { Text = text };
    }

    public ObservableCollection<Item> Items { get; } …
Run Code Online (Sandbox Code Playgroud)

c# wpf listview mvvm scrollviewer

6
推荐指数
1
解决办法
620
查看次数

WPF ScrollViewer:点击=点击,点击并按住/拖动=滚动.怎么做到这一点?

我正在开发一个WPF触摸应用程序.我有一个包含按钮的滚动查看器.我想触摸拖动按钮时滚动显示,并在点击时调用按钮的命令.以下是一些入门代码:

<Window x:Class="wpf_Button_Scroll.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:my="clr-namespace:wpf_Button_Scroll"
    Title="MainWindow" Height="350" Width="200">
<Window.DataContext>
    <my:MyViewModel />
</Window.DataContext>

<Grid>
    <ScrollViewer>
        <ListView ItemsSource="{Binding MyData}" HorizontalAlignment="Stretch">
            <ListView.ItemTemplate>
                <DataTemplate>
                    <Button Content="{Binding}" 
                            Command="{Binding DataContext.MyCommand, RelativeSource={RelativeSource AncestorType=ItemsControl}}" 
                            CommandParameter="{Binding}"
                            Margin="5 2" Width="150" Height="50"
                            FontSize="30" />
                </DataTemplate>
            </ListView.ItemTemplate>
        </ListView>
    </ScrollViewer>
</Grid>
</Window>
Run Code Online (Sandbox Code Playgroud)

和视图模型:

namespace wpf_Button_Scroll
{
class MyViewModel
{
    public MyViewModel()
    {
        MyCommand = new ICommandImplementation();
    }

    public string[] MyData
    {
        get
        {
            return new string[]{
                "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten", 
                "eleven", "twelve", "thirteen", "fourteen", "fifteen", "sixteen", …
Run Code Online (Sandbox Code Playgroud)

wpf xaml scrollviewer touch

6
推荐指数
1
解决办法
2360
查看次数