[英]Scrolling inside selected Item of a ListView
在WPF- ListView
控件上,所选项目必须可视化一些其他详细信息。 如果选择一个项目,则需要更多空间,然后ListView
控件提供。
默认情况下,无法在所选项目中滚动。 向下滚动,它将直接跳到下一个项目,并且看不到所选项目的底部。
有人知道如何启用所选项目内的滚动吗?
下面的代码演示了该行为。 在实际代码中,所选项目更加复杂,但是举个例子,所选项目的大小仅在选中时被修改:
XAML:
<Window x:Class="ListViewWithLargeSelectedItem.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="300" Width="300">
<Grid>
<ListView ItemsSource="{Binding Items}" SelectedItem="{Binding SelectedItem}" HorizontalContentAlignment="Stretch">
<ListView.ItemTemplate>
<DataTemplate>
<Border x:Name="border" Padding="10" HorizontalAlignment="Stretch">
<TextBlock Text="{Binding Text}" />
</Border>
<DataTemplate.Triggers>
<DataTrigger Binding="{Binding IsSelected}"
Value="true">
<Setter TargetName="border" Property="Padding"
Value="40,200" />
</DataTrigger>
</DataTemplate.Triggers>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</Grid>
后面的代码:
public partial class MainWindow : Window
{
private CustomItem _selectedItem;
public CustomItem SelectedItem
{
get { return _selectedItem; }
set
{
if (_selectedItem != null)
{
_selectedItem.IsSelected = false;
}
_selectedItem = value;
_selectedItem.IsSelected = true;
}
}
public List<CustomItem> Items
{
get { return (List<CustomItem>)GetValue(ItemsProperty); }
set { SetValue(ItemsProperty, value); }
}
public static readonly DependencyProperty ItemsProperty =
DependencyProperty.Register("Items", typeof(List<CustomItem>), typeof(MainWindow), new UIPropertyMetadata(null));
public MainWindow()
{
InitializeComponent();
Items = new List<CustomItem>();
for (int i = 0; i < 10; i++)
{
Items.Add(new CustomItem() { IsSelected = false, Text = "ITEM " + i });
}
DataContext = this;
}
}
public class CustomItem : INotifyPropertyChanged
{
public string Text { get; set; }
private bool _isSelected;
public bool IsSelected
{
get { return _isSelected; }
set
{
if (_isSelected == value)
{
return;
}
_isSelected = value;
NotifyOfPropertyChange("IsSelected");
}
}
private void NotifyOfPropertyChange(string propertyName)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
public event PropertyChangedEventHandler PropertyChanged;
}
您的问题不是很清楚,但是如果您说ListView
使用整个项目滚动,而您希望它使用像素滚动,那么请参见MSDN上的ScrollViewer.CanContentScroll
属性页。 如果是这种情况,那么您只需要在ListView
上将此Attached属性设置为False
即可启用平滑滚动:
<ListView ScrollViewer.CanContentScroll="False" ... />
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.