2014-01-27 2 views
0

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; 
} 

답변

1

당신의 질문은 명확하지 않지만 ListView이 전체 항목을 사용하여 스크롤하고 픽셀을 사용하여 스크롤하려는 경우 MSDN의 ScrollViewer.CanContentScroll property 페이지를 참조하십시오. 이런 경우, 당신은 부드러운 스크롤을 가능하게하기 위해 ListViewFalse이 연결된 속성을 설정해야합니다 내가 검색 정확히 무엇을

<ListView ScrollViewer.CanContentScroll="False" ... /> 
+0

. 감사! – rhe1980

+1

@ rhe1980 -이 설정을 false로 설정하면 ListView에서 UI Vritualization이 비활성화됩니다. –

+0

@RohitVats : 좋은 지적입니다! 감사. 사실 나는 방금 몇 가지 항목이 있고 선택한 항목 만 더 많은 공간이 필요합니다. – rhe1980