c#DataGridVie垂直滚动条为啥不能拖动了?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c#DataGridVie垂直滚动条为啥不能拖动了?相关的知识,希望对你有一定的参考价值。
不知道按到什么了,滚动条能显示,但就是不能拖动了。。
private void dgvBlackList_CellClick(object sender, DataGridViewCellEventArgs e)这个事件。。。string action = dgvBlackList.Columns[e.ColumnIndex].Name;//操作类型string tagId = dgvBlackList.CurrentRow.Cells[0].Value.ToString();
string strsql = "";
int rest = 0;
switch (action)
case "btnUpdate":
//获取相应列的数据ID,弹出加载了该ID数据详细信息的Form,用以修改 string id = dgvBlackList.CurrentRow.Cells[0].Value.ToString(); string name = dgvBlackList.CurrentRow.Cells[1].Value.ToString(); string strsql = "update blacklist set id="+id+",name='"+name+"'"; ..........略。。。。 break; 参考技术A 属性那里 ,哪个给固定了,我是不清楚哪个属性了,你好好找一下 true false
为啥我的 Surface ScrollViewer 不能拖动滚动?
【中文标题】为啥我的 Surface ScrollViewer 不能拖动滚动?【英文标题】:Why is my SurfaceScrollViewer not drag-scrolling?为什么我的 Surface ScrollViewer 不能拖动滚动? 【发布时间】:2012-03-26 15:21:56 【问题描述】:我们正在为 Windows 平板电脑编写应用程序。我创建了一个自定义控件,它使用SurfaceScrollViewer
在窗口右侧呈现一个垂直且可滚动的列表。该控件使用一个 Adorner 将自己添加到 Window 的装饰层,以便它可以呈现在窗口内容的顶部。
它工作得非常好,但表面滚动查看器只能通过鼠标滚轮或滚动条滚动。我希望能够隐藏滚动条并依靠用户通过触摸拖动列表,但这拒绝工作。我们在这个项目的其他地方使用了SurfaceScrollViewer
控件,并且效果很好,所以我猜测这个问题取决于控件的构建方式,或者可能是因为它位于 AdornerLayer 中?与在 Surface 上注册触摸有关吗?奇怪的是列表中的SurfaceButton
控件工作正常。
任何帮助或建议将不胜感激。这基本上是自定义控件。我已经删除了一些绑定的零碎以减小尺寸,并且我添加了周围的 Window/AdornerLayer/Adorner 元素以将其置于上下文中。
EDIT - 装饰器实际上被添加到 Grid 的装饰器层,该 Grid 是 Window 的子级。我已经更新了下面的 XAML。
<Window x:Name="Main">
<Grid>
<AdornerDecorator>
<!-- Adorner layer added to Window in code-behind -->
<AdornerLayer>
<Adorner>
<!-- Custom Control Starts Here -->
<Grid x:Name="root" Visibility="Collapsed" Width="Binding ActualWidth, RelativeSource=RelativeSource AncestorType=Window" Height="Binding ActualHeight, RelativeSource=RelativeSource AncestorType=Window">
<Controls:SurfaceButton x:Name="btnCloser" Opacity="0" Background="White"/>
<Grid x:Name="menu" Width="400" HorizontalAlignment="Right" VerticalAlignment="Stretch">
<Grid.RowDefinitions>
<RowDefinition Height="20"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="20"/>
<RowDefinition />
<RowDefinition Height="20"/>
</Grid.RowDefinitions>
<Border Opacity="0.75" BorderThickness="0" Background="Black" Grid.RowSpan="5" />
<TextBlock Text="TemplateBinding Title" FontSize="24" Grid.Row="1" Foreground="White" HorizontalAlignment="Center" Margin="10"/>
<Controls:SurfaceScrollViewer Grid.Row="3" Margin="5" Elasticity="0.0, 0.5" HorizontalScrollBarVisibility="Disabled" VerticalScrollBarVisibility="Auto">
<ItemsControl x:Name="items" Background="Transparent" ItemsSource="TemplateBinding MenuItems">
<ItemsControl.Style>
<Style>
<Setter Property="ItemsControl.ItemsPanel">
<Setter.Value>
<ItemsPanelTemplate>
<StackPanel />
</ItemsPanelTemplate>
</Setter.Value>
</Setter>
<Setter Property="ItemsControl.ItemTemplate">
<Setter.Value>
<DataTemplate>
<Controls:MyButton HorizontalContentAlignment="Center" Margin="3" Content="(Bound Stuff)" Background="(Bound Stuff)"/>
</DataTemplate>
</Setter.Value>
</Setter>
</Style>
</ItemsControl.Style>
</ItemsControl>
</Controls:SurfaceScrollViewer>
</Grid>
</Grid>
</Adorner>
</AdornerLayer>
</AdornerDecorator>
</Grid>
</Window>
【问题讨论】:
现在我不得不向 SurfaceScrollViewer 添加一个滚动条来解决这个问题。这意味着平板电脑用户至少可以使用它来滚动列表。奇怪的是,当你使用滚动条时,它有时会锁定并停止工作,直到重新加载内容。这与 AdornerLayer 有关吗?? 【参考方案1】:好的 - 我已经深入了解了。我意识到答案与这个项目中多次出现的答案相同,但我仍然时不时地忽略它。也许这一次它会永远沉沦!
问题出在 ItemsControl。它不是 Surface 控件,因此不能很好地与 Surface 控件配合使用。我认为基本上发生的情况是,Surface 控件往往会在其他任何事情有机会之前吞噬事件 - 或者可能是相反的方式。
不管怎样,我用下面的 SurfaceListBox 替换了它,这很奏效!
<Controls:SurfaceListBox x:Name="items" Margin="5" Grid.Row="3" Background="Transparent" ItemsSource="TemplateBinding MenuItems" ScrollViewer.HorizontalScrollBarVisibility="Disabled" ScrollViewer.VerticalScrollBarVisibility="Hidden">
<Controls:SurfaceListBox.Resources>
<Converters:PropertyNameReflectionConverter x:Key="ButtonContentConverter"/>
<Converters:SelectedItemBackgroundConverter x:Key="ButtonBackgroundConverter"/>
</Controls:SurfaceListBox.Resources>
<Controls:SurfaceListBox.ItemContainerStyle>
<Style TargetType="Controls:SurfaceListBoxItem">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="x:Type Controls:SurfaceListBoxItem">
<ContentPresenter />
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</Controls:SurfaceListBox.ItemContainerStyle>
<Controls:SurfaceListBox.ItemTemplate>
<DataTemplate DataType="Controls:MyButton">
<Controls:MyButton HorizontalContentAlignment="Center" Margin="3" Background="(Bound Stuff)" Content="(Bound Stuff)"/>
</DataTemplate>
</Controls:SurfaceListBox.ItemTemplate>
</Controls:SurfaceListBox>
【讨论】:
【参考方案2】:问题不在于 ItemsControl,而在于 SurfaceScrollViewer 本身,您可以通过拖动将 SurfaceScrollViewer 的 PanningMode 设置为“None”以外的方式使用触摸/鼠标进行滚动。
【讨论】:
以上是关于c#DataGridVie垂直滚动条为啥不能拖动了?的主要内容,如果未能解决你的问题,请参考以下文章
我安装完windowsxp后,只要打开有滚动条的页面,拖动滚动条时页面就会抖动.为啥?
SplitContainer 中的 Top ListView 不会添加垂直滚动条