我有一个格一个内部的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) 我目前有两个ScrollViewer包含同一集合的备用视图.我通过处理ScrollChanged事件并使用ScrollToVerticalOffset将两个滚动查看器的滚动绑定在一起.
出于演示原因,我已将ScrollViewer滚动条设置为隐藏,并希望从单独的ScrollBar控制它们.
这似乎并不简单.我记得几个月前看到一篇关于它的博客,但我再也找不到了.
任何人都可以向我指出一些有用的资源,或者给我一个正确的方向来推动它如何实现.
提前致谢.
这就是我要的:
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) 我正在研究一个图像查看器控件,该控件由滚动查看器内的图像组成。为了缩放,我在图像的 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) 我在导航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中有一个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) 我正在构建一个照片应用程序,使用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) 我需要在滚动查看器中设置滚动条的边距.我尝试在默认的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) 当使用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) 我正在开发一个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)