标签: scrollviewer

验证错误模板装饰器被切入 ScrollViewer 中

我有以下问题。到目前为止,我将我的文本框放在滚动查看器中,我的 ValidationError Adorner 被 ScrollViewer 剪切了。我找到了 Adorner 和 ScrollViewer 的一些答案,它们说我需要重新模板化我的滚动查看器并添加一个 adornerdecorator。但这对我来说毫无意义,也没有帮助。据我所知,验证装饰器应该在最近的 AdornerDecorator 中呈现。ScrollViewer 默认没有 AdornerDecorator。那么有人知道为什么我的 ValidationAdorner 被削减吗?

我也在寻找解决方案:)

编辑:看来来自 ScrollViewer 模板的 ScrollContentPresenter 导致了问题,因为它默认有一个 AdornerLayer。有什么想法可以解决我的问题吗?

编辑2:

  • 有没有办法在没有 Adornerlayer 的情况下创建新的 ScrollConntentPresenter 模板?
  • 或者有没有办法从 VisualTree 中删除 Adornerlayer?
  • 或者我可以强制 Adornerlayer 在“更高/最顶层”AdornerLayer 中渲染吗?
  • 或者我可以在没有 ScrollViewer 的情况下滚动内容吗?

这是我的 xaml:

<UserControl>
  <AdornerDecorator>
    <Grid x:Name="RootControl">
       <Grid.RowDefinitions>
          <RowDefinition Height="auto" MinHeight="50"/>
          <RowDefinition Height="*"/>
       </Grid.RowDefinitions>

       <Grid x:Name="main" Grid.Row="1">
            <Grid.ColumnDefinitions>
                <ColumnDefinition />
                <ColumnDefinition />
            </Grid.ColumnDefinitions>

            <Border x:Name="InputBorder" Grid.Column="0">
                <ScrollViewer VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Auto">
                    <Grid x:Name="InputContainer" HorizontalAlignment="Stretch">
                        <Grid.RowDefinitions>
                            ...some rows...
                        </Grid.RowDefinitions>
                        <Grid.ColumnDefinitions>
                            ...some columns...
                        </Grid.ColumnDefinitions> …
Run Code Online (Sandbox Code Playgroud)

wpf adorner .net-4.0 scrollviewer

5
推荐指数
1
解决办法
1895
查看次数

如何在 UWP XAML/C# 中通过滚动查看器更改滚动量?

我正在使用 ListView 来显示一些项目,比如高度为 100。如果有很多项目,垂直滚动条将通过 ScrollViewer 属性显示。然而,当用户滚动列表时,它有时会滚动一半屏幕,因此只需滚动一下,它就会覆盖整个列表视图。

我想要一些代码来设置滚动量,比如当时的 100 高度。我尝试搜索文档但找不到任何内容。实际上,数据来自绑定,项目的数量各不相同,但每个项目都有固定的高度是可以的。

示例代码:

<ListView Name="lvSummaryList" ScrollViewer.VerticalScrollMode="Enabled"
                                              ScrollViewer.IsVerticalRailEnabled="True"
                                              VerticalAlignment="Bottom"
                                              SelectionMode="None"                                          ScrollViewer.VerticalScrollBarVisibility="Auto"   
                                              ScrollViewer.HorizontalScrollMode="Disabled"              ScrollViewer.IsVerticalScrollChainingEnabled="True"
                                              Margin="0,5,10,0"
                                              MaxHeight="600" >
                <ListView.ItemsPanel>
                    <ItemsPanelTemplate>
                        <ItemsWrapGrid Orientation="Horizontal" GroupPadding="1"  Margin="1" MinHeight="100" MaxHeight="200" MaximumRowsOrColumns="4" VerticalAlignment="Center"/>
                    </ItemsPanelTemplate>
                </ListView.ItemsPanel>
 </ListView>
Run Code Online (Sandbox Code Playgroud)

我该如何实现这一点,是否有属性甚至可以覆盖当前行为?

c# scrollviewer uwp uwp-xaml

5
推荐指数
1
解决办法
1179
查看次数

当向 XAML 中的 TextBlock 添加新行时,将 ScrollViewer 滚动到 WPF 中的底部

我试图将垂直滚动条保留在底部(最新条目),但目前,滚动条只是停留在同一个位置,因此当内容被添加到字符串中时,滚动条会移动到顶部。

我知道我可以使用ServerScroll.ScrollToEnd()代码隐藏中的属性将栏移动到末尾。但是有没有办法用xaml自动做到这一点?(这样我就不必每次添加到字符串时都调用此属性)。

XAML

<ScrollViewer Name="ServerScroll"
              VerticalScrollBarVisibility="Auto">
    <TextBlock Name="serverConsole"
               Margin="5"
               Background="White"
               TextWrapping="Wrap"/>
</ScrollViewer>
Run Code Online (Sandbox Code Playgroud)

代码隐藏

private void example_Click(object sender, RoutedEventArgs e)
{
    ServerConsole += "asdf\r\n";      // binded to TextBlock
    ServerScroll.ScrollToEnd();    
}
Run Code Online (Sandbox Code Playgroud)

c# wpf eventtrigger scrollviewer

5
推荐指数
1
解决办法
3205
查看次数

重新绑定Silverlight Listbox控件之后如何让它列表框滚动到顶部?

我有一个用作搜索结果框的silverlight列表框.我正在使用动态搜索(搜索框中的键盘会导致触发事件以过滤此列表框的内容).我遇到的问题是如果用户在未经过滤的情况下向下滚动,然后进行搜索,则重新绑定列表框不会导致滚动返回到顶部,使得结果看起来只有一个它的价值.

我到目前为止列表框的代码是这个(这是一个简化版本):

XAML:

<Grid x:Name="MainGrid" Rows="2">
    <StackPanel Orientation="Horizontal" Grid.Row="0">
         <TextBlock text="Search" Grid.Row="0" />
         <Textbox x:name="textboxSearch" Keyup="textBoxSearch_KeyUp" width="200" 
                  Height="25"/>
    </StackPanel>
    <ListBox x:Name="SearchResultBox" Visibility="Visible" Grid.Row="1"
             ScrollViewer.HorizontalScrollBarVisibility="Auto"
             ScrollViewer.VerticalscrollbarVisibility="Auto">
         <ListBox.ItemTemplate>
              <DataTemplate>
                   <StackPanel Orientation="Vertical">
                        <TextBlock Text="{Binding ReportName}" />
                        <TextBlock Text="{Binding ReportDescription}" />
                   </StackPanel>
              </DataTemplate>
         </Listbox.ItemTemplate>
    </ListBox>
</Grid>
Run Code Online (Sandbox Code Playgroud)

VB:

Imports System.Threading
Imports System.Collections.ObjectModel
Imports System.ComponentModel
Partial Public Class ucSearch
     Inherits UserControl
     Private WithEvents BGwork As New BackgroundWorker()
     Private mReportList as New List(Of cFilter)

     Public Sub New()
          InitializeComponent()
          FillReportList()
          NewFilterList()
     End Sub

     Private Sub FillReportList()
          mReportList.Add(new cFilter("Report …
Run Code Online (Sandbox Code Playgroud)

silverlight listbox scrollviewer

4
推荐指数
1
解决办法
4268
查看次数

Scrollviewer边缘模糊效果,opacitymask无法正常工作

我想在不使用滚动条的情况下为触摸屏应用程序创建自定义scrollviewer控件.为了让用户知道他们可以滚动内容,我使用opacitymask以线性渐变淡化滚动查看器的底部和顶部.这一切都很好,除了滚动查看器之外的opacitymask应用于文本块的问题!

我的意思是,我希望将渐弱效果应用于scrollviewer的顶部1%和底部1%,然后滚动查看器的中间部分将可见.然而,问题是,即使我在文本块上设置了OpacityMask ="{x:Null}",滚动查看器中的控件也会发生这种效果.

我已经尝试将opacitymask应用到scrollviewer的外部,但同样的问题发生了.Opacitymask属性是否也适用于孩子?有没有更好的方法来做这种褪色效果?

这是我正在使用的代码:

<Grid Width="200" Height="130">
    <ScrollViewer BorderThickness="0" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Padding="2"
                           HorizontalScrollBarVisibility="Disabled" VerticalScrollBarVisibility="Hidden" >
        <ScrollViewer.OpacityMask>
            <LinearGradientBrush StartPoint="0,0" EndPoint="0,1">
                <GradientStop Color="Transparent" Offset="0" />
                <GradientStop Color="Black" Offset="0.1" />
                <GradientStop Color="Black" Offset="0.9" />
                <GradientStop Color="Transparent" Offset="1" />
            </LinearGradientBrush>
        </ScrollViewer.OpacityMask>
        <TextBlock Margin="0,10" Style="{StaticResource textSmall}" TextWrapping="Wrap">
        Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis …
Run Code Online (Sandbox Code Playgroud)

wpf scrollviewer

4
推荐指数
2
解决办法
3386
查看次数

为WPF网格指定ScrollViewer的宽度减去滚动条

我有一个WPF UserControl,上面有两个网格.底部网格位于ScrollViewer中.我们的想法是让第一个Grid成为第二个Grid的标题.但是我的列宽度有问题.两个网格都应该占用它们可以占用的所有空间(窗口的宽度),但顶部网格当然应该稍微宽一点,因为底部网格右侧有一个滚动条.

这是我得到的简化Xaml:

<UserControl>
    <DockPanel>
        <Grid DockPanel.Dock="Top">
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="*" />
                <ColumnDefinition Width="*" />
                <ColumnDefinition Width="*" />
            </Grid.ColumnDefinitions>
        </Grid>
        <ScrollViewer>
            <Grid>
                <Grid.ColumnDefintions>
                    <ColumnDefinition Width="*" />
                    <ColumnDefinition Width="*" />
                    <ColumnDefinition Width="*" />
                </Grid.ColumnDefintions>
            </Grid>
        </ScrollViewer>
    </DockPanel>
</UserControl>
Run Code Online (Sandbox Code Playgroud)

这实际上很好,除了顶部网格的最右边的列延伸到滚动条上,我想避免它.

以下是结果的图像:网格列和滚动条的宽度.红色表示列/单元格现在的位置,但我希望它停在蓝线处.我已经尝试过SharedSizeGroups,但这似乎让我的网格再次变小(不占用窗口的整个空间).

wpf grid scrollviewer width

4
推荐指数
2
解决办法
4627
查看次数

永久启用的滚动条可能吗?

我试图找到一种ScrollBars/ScrollViewers永久启用的方法时遇到问题.我正在开发一个数据输入应用程序,其中某些用户可能只具有"读取"权限.这需要禁用所有控件,以便它们无法进行任何更改.

禁用控件时,用户无法查看可滚动控件中的所有信息(Infragistics XamDataGrid,DevExpress GridControl,TextBoxes with Wrap ListBox等).我希望我能"智取"微软,并Trigger在设置IsEnabled为false时将其设置为true,但当然,它不起作用(出于各种原因,我敢肯定).

我一直在严格关注文本框,试图禁用内容,但保持ScrollViewer启用并没有运气.

我希望可能有一个解决方案,IE覆盖始终返回true 的IsEnabled依赖属性ScrollViewer,或者提供某种Style不允许ScrollViewer被禁用的东西.

我知道TextBox有一个IsReadOnly属性,但这对我解决此问题所需的许多其他控件没有用.

有没有什么方法可以用一种相当简单的方式来解决这个问题(简单的方法就是我可以制作一个适用于所有地方的样式,而无需更改200多个代码文件).

谢谢

编辑: 这是我在示例项目中使用的代码,试图解决此问题.

<Window x:Class="WPFScrollViewerStyles.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:Microsoft_Windows_Themes="clr-namespace:Microsoft.Windows.Themes;assembly=PresentationFramework.Aero"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="MainWindow" Height="350" Width="525">
<Window.Resources>
    <Style BasedOn="{x:Null}" TargetType="{x:Type TextBox}">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type TextBox}">
                    <Microsoft_Windows_Themes:ListBoxChrome x:Name="Bd" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" RenderMouseOver="{TemplateBinding IsMouseOver}" RenderFocused="{TemplateBinding IsKeyboardFocusWithin}" SnapsToDevicePixels="true">
                        <ScrollViewer x:Name="PART_ContentHost" HorizontalScrollBarVisibility="Visible" 
                                      SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" IsEnabled="True" />
                    </Microsoft_Windows_Themes:ListBoxChrome> …
Run Code Online (Sandbox Code Playgroud)

wpf styles scrollbar scrollviewer

4
推荐指数
1
解决办法
4655
查看次数

Windows Phone:如何在ScrollViewer(列表框)中禁用触摸滚动?

我有一个里面有一个列表框的滚动查看器:我需要通过触摸禁用垂直滚动,我该怎么办?换句话说,用户无法通过触摸滚动(我已经放了按钮,但这是另一个故事).

    <ScrollViewer  HorizontalScrollBarVisibility="Disabled" VerticalScrollBarVisibility="Disabled" x:Name="imagesScrollview" Width="480" Height="595" Margin="0,112,0,63">
        <ScrollViewer.RenderTransform>
            <CompositeTransform/>
        </ScrollViewer.RenderTransform>
        <ListBox Name="listavideo" Height="595" Width="480">
            <ListBox.ItemTemplate>
                <DataTemplate>
                    <Button Width="470" Height="146" Background="White" BorderBrush="#346699" Click="apri_video" Name="{Binding Mylink}" Margin="5,0,5,0" Padding="5">
                        <Button.Content>
                            <StackPanel Orientation="Horizontal" Width="470">
                                <Image Source="{Binding Thumbnail}" Width="160" HorizontalAlignment="Left" VerticalAlignment="Top" />
                                <StackPanel Orientation="vertical" Width="285" Margin="0,0,0,0" Height="146">
                                    <StackPanel Orientation="Horizontal" Width="275" Margin="0,0,10,0">
                                        <TextBlock Width="275" FontSize="18" Text="{Binding Title}" Foreground="#34638f" TextWrapping="Wrap" />
                                    </StackPanel>
                                    <StackPanel Orientation="Horizontal" Width="275" Margin="0,0,10,0">
                                        <TextBlock Width="275" FontSize="14" Text="{Binding Description}" Foreground="#51504e" TextWrapping="Wrap" />
                                    </StackPanel>
                                </StackPanel>
                            </StackPanel>
                        </Button.Content>
                    </Button>
                </DataTemplate>
            </ListBox.ItemTemplate>
        </ListBox>
    </ScrollViewer>
Run Code Online (Sandbox Code Playgroud)

谢谢.

scroll listbox scrollviewer touch windows-phone-7

4
推荐指数
1
解决办法
4550
查看次数

如何检测到ScrollViewer项目的结尾(Windows 8)?

当用户在使用带有C#后置代码的.xaml的Windows 8'Metro UI'应用程序中滚动到ScrollViewer的末尾时,我需要做一些工作.或者,ScrollViewer启用了快照点,因此检测"捕捉"事件也会起作用.

谢谢

c# xaml scrollviewer windows-8

4
推荐指数
1
解决办法
3500
查看次数

使ScrollViewer填充动态区域

在下面的示例中,我无法让ScrollViewer填充可用空间,由于上面的动态内容,高度未知但是它是否无法填充可用空间而不是过度运行?

   <Grid x:Name="Main" Height="200" MaxHeight="200">
      <StackPanel>
         <Grid x:Name="MainContent" Height="170" MaxHeight="170">
            <StackPanel>
               <TextBlock FontSize="24" Text="Dynamic data "/>
               <TextBlock FontSize="24" Text="height "/>
               <TextBlock FontSize="24" Text="unknown... "/>
               <Grid x:Name="Results" Background="Red">
                  <ScrollViewer>
                     <StackPanel>
                        <TextBlock FontSize="24" Text="Result set... 0"/>
                        <TextBlock FontSize="24" Text="Result set... 1"/>
                        <TextBlock FontSize="24" Text="Result set... 2"/>
                        <TextBlock FontSize="24" Text="Result set... 3"/>
                     </StackPanel>
                  </ScrollViewer>
               </Grid>
            </StackPanel>
         </Grid>
         <Grid x:Name="Nav">
            <Button HorizontalAlignment="Left" Content="Back"/>
            <Button HorizontalAlignment="Right" Content="Forward"/>
         </Grid>
      </StackPanel>
   </Grid>
Run Code Online (Sandbox Code Playgroud)

wpf xaml scrollviewer

4
推荐指数
1
解决办法
5791
查看次数