我有一个Visuals 的集合ListBox.我需要找到XPosition里面的一个元素,然后动画HorizontalOffset中的ListBox的ScrollViewer.基本上我想创建一个动画ScrollIntoView方法.
这给了我一些问题.首先,我如何获得对ListBoxs scrollviewer 的引用?其次,我怎样才能获得相对XPosition或HozintalOfffset任意元素ListBox?
我并没有对ListBox自身的任何输入做出反应,因此我无法使用Mouse相关属性.
我有一个网格:
<Grid.RowDefinitions>
<RowDefinition Height="100"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
Run Code Online (Sandbox Code Playgroud)
第二行是scrollviewer:
<ScrollViewer VerticalScrollBarVisibility="Auto" MinHeight="400" Grid.Row="1">
<ItemsControl ItemsSource="{Binding SelectedUserControls}"/>
</ScrollViewer>
Run Code Online (Sandbox Code Playgroud)
如果需要,我希望第二行使用滚动,但滚动是永远不可见的,如果项目控件比屏幕大,则为事件.
如何在需要时显示滚动?
我有一个ScrollViewer的问题,我用它来滚动包含数据网格的用户控件.如果没有滚动查看器,列会根据需要填充数据网格,但在添加滚动查看器时,列会缩小到~15px.我能够简化我的布局,仍然可以重现这种行为.
将数据网格宽度绑定到另一个控件时,列具有它们的法线,但这与数据网格上的固定宽度具有相同的效果.我想我不是第一个遇到这个问题的人.如何解决此问题,让我的网格将其大小调整为可用空间并为其列提供一个比例宽度?
使用scrollviewer:
没有:

<Window x:Class="GridTest.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 HorizontalScrollBarVisibility="Auto">
<Grid MinWidth="200">
<DataGrid Margin="0" AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridCheckBoxColumn Header="Column A" Width="*"/>
<DataGridCheckBoxColumn Header="Column B" Width="*"/>
</DataGrid.Columns>
</DataGrid>
</Grid>
</ScrollViewer>
Run Code Online (Sandbox Code Playgroud)
我正在使用我们使用标准ControlTemplates创建的自定义Scrollbars,但是当我将它们应用到ListBox时,右下角有一个角落,我无法找到任何覆盖方式.
不幸的是,在我获得更多分数之前,我无法发布图片.但我所指的角落是当垂直和水平滚动条都出现时,右下方有一个空间,里面充满了灰白色的颜色,我无法消除
为什么这不支持水平滚动?
<ScrollViewer>
<ItemsControl ItemsSource="{Binding Territories}" HorizontalAlignment="Left">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<VirtualizingStackPanel CanHorizontallyScroll="True" ScrollViewer.HorizontalScrollBarVisibility="Visible" ScrollViewer.VerticalScrollBarVisibility="Auto" >
</VirtualizingStackPanel>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<Grid >
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="75" />
<ColumnDefinition Width="75" />
<ColumnDefinition Width="150" />
<ColumnDefinition Width="150" />
<ColumnDefinition Width="65" />
<ColumnDefinition Width="60" />
<ColumnDefinition Width="75" />
<ColumnDefinition Width="75" />
</Grid.ColumnDefinitions>
<TextBox Grid.Row="0" Grid.Column="0" Text="{Binding Quantity, StringFormat=N0, ValidatesOnDataErrors=True}" />
<TextBox Grid.Row="0" Grid.Column="1" Text="{Binding ProductionNumber, ValidatesOnDataErrors=True}" />
<ComboBox Grid.Row="0" Grid.Column="2" SelectedValuePath="PrimaryKey" SelectedValue="{Binding RepKey}" ItemsSource="{Binding RepCanidates}" TextSearch.TextPath="FullName" Margin="4">
<ComboBox.ItemTemplate>
<DataTemplate>
<TextBlock …Run Code Online (Sandbox Code Playgroud) 单击鼠标中键(又名:鼠标滚轮),然后稍微向下移动鼠标,用户可以在IE和大多数Windows应用程序中滚动.默认情况下,WPF控件中似乎缺少此行为?有没有设置,解决方法,或者我缺少的明显的东西?
我希望有人可以帮助我.我正在构建一个WPF成像应用程序,它从相机中获取实时图像,允许用户查看图像,然后突出显示该图像上的感兴趣区域(ROI).然后将关于ROI的信息(宽度,高度,相对于图像上的点的位置等)发送回相机,实际上告知/训练相机固件在哪里寻找条形码,文本,液位,转弯等内容在图像上的螺丝等).所需的功能是能够平移和缩放图像及其ROI,以及在图像缩放比观看区域大时滚动.ROI的StrokeThickness和FontSize需要保持原始比例,但ROI内形状的宽度和高度需要与图像一起缩放(这对于捕获传输到相机的精确像素位置至关重要).除了滚动和其他一些问题之外,我已经解决了大部分问题.我关注的两个方面是:
当我介绍ScrollViewer时,我没有得到任何滚动行为.据我所知,我需要引入一个LayoutTransform来获得正确的ScrollViewer行为.然而,当我这样做时,其他区域开始崩溃(例如,ROI在图像上没有保持正确的位置,或者当平移时鼠标指针开始从图像上的选定点开始蠕动,或者我的图像的左角弹回到MouseDown上的当前鼠标位置.)
我无法按照我需要的方式扩展投资回报率.我有这个工作,但它并不理想.我所拥有的并没有保留精确的笔划厚度,我没有考虑忽略文本块上的比例.希望你能看到我在代码示例中正在做的事情.
我确定我的问题与我对Transforms及其与WPF布局系统的关系缺乏了解有关.希望展示我迄今为止所取得成就的代码将有所帮助(见下文).
仅供参考,如果Adorners是建议,可能在我的场景中不起作用,因为我最终会得到比支持更多的装饰(谣言144装饰者是事情开始崩溃的时候).
首先,下面是显示带有ROI(文本和形状)的图像的屏幕截图.矩形,椭圆和文本需要按照比例和旋转方式跟随图像上的区域,但不能在厚度或字体大小上进行缩放.

这是显示上面图像的XAML,以及用于缩放的滑块(鼠标滚轮缩放将在稍后出现)
<Window x:Class="PanZoomStackOverflow.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
mc:Ignorable="d"
Title="MainWindow" Height="768" Width="1024">
<DockPanel>
<Slider x:Name="_ImageZoomSlider" DockPanel.Dock="Bottom"
Value="2"
HorizontalAlignment="Center" Margin="6,0,0,0"
Width="143" Minimum=".5" Maximum="20" SmallChange=".1"
LargeChange=".2" TickFrequency="2"
TickPlacement="BottomRight" Padding="0" Height="23"/>
<!-- This resides in a user control in my solution -->
<Grid x:Name="LayoutRoot">
<ScrollViewer Name="border" HorizontalScrollBarVisibility="Auto"
VerticalScrollBarVisibility="Auto">
<Grid x:Name="_ImageDisplayGrid">
<Image x:Name="_DisplayImage" Margin="2" Stretch="None"
Source="Untitled.bmp"
RenderTransformOrigin ="0.5,0.5"
RenderOptions.BitmapScalingMode="NearestNeighbor"
MouseLeftButtonDown="ImageScrollArea_MouseLeftButtonDown"
MouseLeftButtonUp="ImageScrollArea_MouseLeftButtonUp"
MouseMove="ImageScrollArea_MouseMove">
<Image.LayoutTransform>
<TransformGroup>
<ScaleTransform />
<TranslateTransform />
</TransformGroup>
</Image.LayoutTransform>
</Image>
<AdornerDecorator> <!-- Using this Adorner Decorator for Move, …Run Code Online (Sandbox Code Playgroud) 有没有人知道在框架上定义垂直滚动条之间的区别如下:
<ScrollViewer Grid.Row="2" VerticalScrollBarVisibility="Auto">
<Frame Name="Frame1"
ScrollViewer.CanContentScroll="True" />
</ScrollViewer>
Run Code Online (Sandbox Code Playgroud)
或者像这样:
<ScrollViewer Grid.Row="2">
<Frame Name="Frame1"
ScrollViewer.VerticalScrollBarVisibility="Auto"
ScrollViewer.CanContentScroll="True" />
</ScrollViewer>
Run Code Online (Sandbox Code Playgroud)
此框架嵌套在WebBrowser控件中,并以第一种方式设置它正确显示垂直滚动条,并且仅在需要滚动(自动)时才可见.当我以第二种方式设置垂直滚动条时,即使它不需要滚动(可见)也始终可见.
我将使用第一个选项,因为它符合我的需要,但如果我设置错误,我不想在路上感到惊讶.
谢谢!
我有一个TreeView.现在,我想检测,如果垂直滚动条是否可见.我试试的时候
var visibility = this.ProjectTree.GetValue(ScrollViewer.VerticalScrollBarVisibilityProperty)
Run Code Online (Sandbox Code Playgroud)
(其中this.ProjectTree是TreeView)我总是获得Auto以获得可见性.
如果ScrollBar有效可见,我该如何检测?
谢谢.
我的XAML看起来像这样
<navigation:Page x:Class="SilverlightApplication1.Home">
<Grid x:Name="LayoutRoot">
<!--
<ScrollViewer>
<Grid>
<TextBlock Text="myTextBlock" />
</Grid>
</ScrollViewer>
-->
</Grid>
Run Code Online (Sandbox Code Playgroud)
我想以编程方式通过后面的代码执行上面的注释部分.
我的代码背后看起来像这样
public partial class Home : Page
{
public Home()
{
InitializeComponent();
ScrollViewer sv = new ScrollViewer();
Grid grid = new Grid();
TextBlock block = new TextBlock();
block.Text = "My Text block";
grid.Children.Add(block);
sv.ScrollIntoView(grid);
LayoutRoot.Children.Add(sv);
}
Run Code Online (Sandbox Code Playgroud)
这不起作用,因为它只显示滚动查看器但隐藏了文本块.
我错过了什么?
有没有办法使用silverlight工具包中提供的扩展方法"ScrollIntoView"以编程方式将子项添加到"ScrollViewer"控件?我没有为ScrollViewer元素找到一个名为"Children"的属性
谢谢您的帮助
scrollviewer ×10
wpf ×9
c# ×2
grid ×2
listbox ×2
scroll ×2
scrollbar ×2
xaml ×2
animation ×1
frame ×1
mousewheel ×1
pan ×1
silverlight ×1
wpfdatagrid ×1
zoom ×1