WPF-ListView
컨트롤에서 선택한 항목은 몇 가지 추가 정보를 시각화해야합니다. 항목을 선택하면 더 많은 공간이 필요하고 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;
}
. 감사! – rhe1980
@ rhe1980 -이 설정을 false로 설정하면 ListView에서 UI Vritualization이 비활성화됩니다. –
@RohitVats : 좋은 지적입니다! 감사. 사실 나는 방금 몇 가지 항목이 있고 선택한 항목 만 더 많은 공간이 필요합니다. – rhe1980