我有一个包含树视图的scrollviewer.
我以编程方式填充树视图(它没有绑定),并将树视图扩展为预定的treeviewitem.一切正常.
我的问题是,当树扩展时,我想滚动视图,父树视图滚动到我刚刚扩展的树视图.有任何想法吗? - 请记住,树视图每次展开时可能不具有相同的结构,因此排除了仅存储当前滚动位置并重置为...
我对冒泡事件有疑问.我设法在边框,网格,堆栈面板中冒泡,而不是在ScrollViewer中
如果您查看下面的示例,您会注意到当您单击TextBlock时,事件会被标记为Grid.但是当我包含ScrollViewer时,事件在此停止并且不会发送到网格.
有没有人现在发生这种情况,如果它可以修复?我真的需要能够通过ScrollViewer冒泡事件,因为我一直在使用它.
<Grid MouseLeftButtonDown="Grid_MouseLeftButtonDown">
<!--<ScrollViewer MouseLeftButtonDown="ScrollViewer_MouseLeftButtonDown">-->
<StackPanel Orientation="Vertical" MouseLeftButtonDown="StackPanel_MouseLeftButtonDown">
<TextBlock Text="Click me to bubble an event" MouseLeftButtonDown="TextBlock_MouseLeftButtonDown"/>
</StackPanel>
<!--</ScrollViewer>-->
</Grid>
public partial class MainPage : UserControl
{
public MainPage()
{
InitializeComponent();
}
private void Grid_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
MessageBox.Show("LayoutRoot clicked");
}
private void ScrollViewer_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
MessageBox.Show("ScrollViewer clicked");
e.Handled = false;
}
private void StackPanel_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
MessageBox.Show("StackPanel clicked");
e.Handled = false;
}
private void TextBlock_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
MessageBox.Show("Textblock clicked");
e.Handled = …Run Code Online (Sandbox Code Playgroud) 我确实有一个关于在scrollviewer中使用listview进行布局的问题.一旦listview位于scrollviewer中,它就会使用它的最大大小并且不会自动滚动,因为scrollviewer为其内部的控件提供了无限量的空间.问题是,只有当用户向下滚动并且我想使列表视图仅使用必要的空间并使用滚动条本身时,才能看到长列表下方的控件.图片确实告诉了更多的信息而不是文字(图片的链接也说得很多,因为我的声誉还不到10岁.编辑2:我只能使用一个链接,所以我将所有图片复制到一个).如果列表不长,一切都可以:
图片1 : 
现在如果列表更长,下面的控件会向下移动到看不见的地方:
图2:见图1中的链接
我现在想做的是:
图3:见图1中的链接
这本身并不是一个问题,因为我们可以将所有内容放在dockpanal中并将下面的控件停靠到Dock.Below和Top to Top,并让listview用"lastchildfill"填充中心.现在为真正的问题.如果窗口变小怎么办?然后首先列表视图消失,然后是其他所有内容,而没有滚动条滚动到底部的控件.
图4:见图1中的链接
我正在寻找的理想解决方案是在窗口(或根滚动查看器)上设置滚动条,这样我们就可以像这样滚动到窗口的每个部分,只要外部滚动条一切都是最小尺寸就可以看到.
图5:见图1中的链接
有任何想法吗?图片太多了?这里有一点xaml供大家尝试使它工作(这只是一个快速的例子窗口......)
<Window x:Class="WpfTest1.ScrollTestWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:sys="clr-namespace:System;assembly=mscorlib"
Title="ScrollTestWindow" Height="400" Width="700">
<ScrollViewer >
<DockPanel LastChildFill="True" ScrollViewer.CanContentScroll="True" ScrollViewer.HorizontalScrollBarVisibility="Visible">
<Grid DockPanel.Dock="Top">
<TextBlock Text="Example controls above listview" Background="LightGray" FontSize="30"></TextBlock>
</Grid>
<Grid DockPanel.Dock="Bottom">
<TextBlock Text="Example controls below listview" Background="LightGray" FontSize="30"></TextBlock>
</Grid>
<ListView FontSize="30">
<ListView.View>
<GridView>
<GridViewColumn Width="190" Header="Date" />
<GridViewColumn Width="200" Header="Day Of Week" DisplayMemberBinding="{Binding DayOfWeek}" />
<GridViewColumn Width="120" Header="Year" DisplayMemberBinding="{Binding Year}" />
</GridView>
</ListView.View>
<sys:DateTime>1/1/1</sys:DateTime>
<sys:DateTime>1/1/1</sys:DateTime>
<sys:DateTime>1/1/1</sys:DateTime>
<sys:DateTime>1/1/1</sys:DateTime>
<sys:DateTime>1/1/1</sys:DateTime>
<sys:DateTime>1/1/1</sys:DateTime> …Run Code Online (Sandbox Code Playgroud) 问题:在Windows Phone上获取ScrollViewer的滚动事件
我有一个像这样的scrollviewer:
<Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
<ScrollViewer x:Name="MyScroller">
<StackPanel>
<!-- ... -->
</StackPanel>
</ScrollViewer>
</Grid>
Run Code Online (Sandbox Code Playgroud)
我需要在MyScroller滚动时发生的事件:
// MyScroller.Scroll += // <-- "Scroll" event does not exist on ScrollViewer
MyScroller.MouseWheel += MyScroller_MouseWheel; // Does not fire on scroll
MyScroller.ManipulationDelta += MyScroller_ManipulationDelta; // Fires for pinch-zoom only
Run Code Online (Sandbox Code Playgroud) 我在WPF中有一个使用ScrollViewr的应用程序,我想将它移植到WinForms,是否有一个等效的WinForms控件?
原因:
WPF程序很慢,我似乎无法学习如何正确渲染程序(GameOfLife).码:
<ScrollViewer Name="displayPlaceHolder" HorizontalScrollBarVisibility="Auto">
<Canvas Name="display" MouseMove="display_MouseMove" MouseDown="display_MouseDown" Cursor="Cross" KeyDown="global_KeyDown" Focusable="True" />
</ScrollViewer>
Run Code Online (Sandbox Code Playgroud) 我已经研究过几个与ScrollViewer相关的问题,但是没有一个问题适合我.这几乎可以肯定是由于我对元素的大小缺乏了解.首先,我的XAML(UserControl定义除外,这是整个控件):
<DockPanel Width="Auto">
<ScrollViewer DockPanel.Dock="Top" HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Visible" CanContentScroll="True" BorderBrush="{DynamicResource PanelBorder}" BorderThickness="1,1,1,1" Background="{DynamicResource LightGradientBackgroundBrush}">
<ItemsControl Focusable="false" Width="Auto" MinHeight="30" ItemsSource="{Binding RequiredFields}" OverridesDefaultStyle="False">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<DockPanel />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<Grid Margin="3,0,3,3">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="110"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Label Content="{Binding Path=Header, Mode=OneTime}" Foreground="{DynamicResource SilverBorderColorBrush}" Grid.Column="0"/>
<TextBox Text="{Binding Path=Value}" HorizontalAlignment="Stretch" Foreground="{DynamicResource SilverBorderColorBrush}" Grid.Column="1"/>
</Grid>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</ScrollViewer>
</DockPanel>
Run Code Online (Sandbox Code Playgroud)
此控件作为内容加载到选项卡中.托管选项卡的窗口可以调整大小,选项卡内容的最小大小为60.我要做的是让scrollviewer填充选项卡,但不要将选项卡推过窗口的边界.使用上面的XAML,多余的内容会导致选项卡高度扩展,并且窗口上出现滚动条,而不是Tab.
scrollviewer正在扩展到其子项的大小,因此将选项卡高度推出.我想要的是,将scrollviewer固定到选项卡的大小,并使scrollviewer中的内容在scrollviewer的范围内增长,以便在内容太多时显示滚动条.
我哪里错了?
编辑:
问题是高度,而不是宽度.宽度表现得如此.我已根据建议将包装器更改为网格,但除非我设置了Height属性,否则网格会扩展以适应展开的scrollviewer的内容,从而导致与以前相同的问题.
更新了XAML:
<Grid MinHeight="60" VerticalAlignment="Top">
<Border BorderBrush="{DynamicResource PanelBorder}" BorderThickness="1,1,1,1">
<ScrollViewer
HorizontalScrollBarVisibility="Auto"
VerticalScrollBarVisibility="Visible"
CanContentScroll="True"
BorderBrush="{DynamicResource PanelBorder}"
BorderThickness="1,1,1,1"
Background="{DynamicResource LightGradientBackgroundBrush}"
>
<ItemsControl …Run Code Online (Sandbox Code Playgroud) 这就是我的控制树的样子:
<window>
<scrollviewer>
<expander>
<scrollviewer>
<grid>
</grid>
</scrollviewer>
</expander>
<expander>
<scrollviewer>
<grid>
</grid>
</scrollviewer>
</expander>
</scrollviewer>
</window>
Run Code Online (Sandbox Code Playgroud)
使用鼠标滚轮,控件自动从父滚动浏览器传递到子滚动查看器,但是当我滚动到子滚动查看器的末尾时,控件不会传递回父scorllviewer.我该如何实现这一目标?
扩展器,网格和滚动查看器是动态生成的.
当我在列表框中使用滚动查看器时,当我通过触摸滚动到达列表框的末尾时,我的整个窗口都会弹跳.使用鼠标滚轮时不会出现此问题.如何禁用这种过度滚动/橡皮筋效果/反弹效果/弹跳效果.
我在Windows 8计算机上使用.NET Framework 4.5.
您可以在此视频中看到反弹效果:http://www.vidup.de/v/gQ2pI/
这是我的示例代码:
<Window x:Class="style_test_for_scrollviewer.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">
<Grid>
<ListBox Width="200">
<WrapPanel Width="200" ScrollViewer.PanningMode="VerticalOnly" ScrollViewer.CanContentScroll="True" ScrollViewer.VerticalScrollBarVisibility="Visible">
<Button Height="200" Width="200"></Button>
<Button Height="200" Width="200"></Button>
<Button Height="200" Width="200"></Button>
<Button Height="200" Width="200"></Button>
<Button Height="200" Width="200"></Button>
<Button Height="200" Width="200"></Button>
<Button Height="200" Width="200"></Button>
<Button Height="200" Width="200"></Button>
<Button Height="200" Width="200"></Button>
<Button Height="200" Width="200"></Button>
<Button Height="200" Width="200"></Button>
<Button Height="200" Width="200"></Button>
</WrapPanel>
</ListBox>
</Grid>
</Window>
Run Code Online (Sandbox Code Playgroud) 我有这个ScrollViewer,我以编程方式添加元素:
<ScrollViewer VerticalSnapPointsAlignment="Near"
VerticalSnapPointsType="Mandatory"
VerticalScrollMode="Enabled"
VerticalScrollBarVisibility="Hidden"
ZoomMode="Disabled"
Width="400"
Height="400"
x:Name="MainFeatureScrollViewer"
ViewChanging="ScrollViewer_ViewChanging">
<StackPanel x:Name="MainFeatureStackPanel" />
</ScrollViewer>
Run Code Online (Sandbox Code Playgroud)
当我像下面一样调用ChangeView时,它返回false并且没有任何反应.为什么这不起作用?
bool result = this.MainFeatureScrollViewer.ChangeView(null, 400, null, true);
Run Code Online (Sandbox Code Playgroud) 我有一些自定义计算,根据ScrollViewer视口的尺寸更改控件的尺寸.目前,我在获取ScrollViewer.SizeChanged事件时进行了这些计算.但是,似乎在ScrollViewer更新ViewPort维度之前执行了SizeChanged事件.我的SizeChanged事件处理程序显示ScrollViewer发件人,其Width和Height更新为新维度,但ViewportWidth和ViewportHeight属性属于旧维度.
一旦这些值发生变化,有没有办法执行代码?
scrollviewer ×10
wpf ×7
c# ×4
events ×2
itemscontrol ×1
layout ×1
listview ×1
scroll ×1
silverlight ×1
touch ×1
treeview ×1
windows ×1
windows-8.1 ×1
winforms ×1
winrt-xaml ×1
xaml ×1