2012-06-28 29 views
0

如何在WPF ListView中切換滾動鎖定?如何在WPF ListView中切換滾動鎖定?

當更多的項目被添加到ListView時,比根據滾動鎖定狀態顯示下面應該發生的空間還要多。

  1. Scroll Lock打開時啓用增加更多的物品時ListView不應滾動(這是默認的行爲)。

  2. 當滾動鎖定爲已禁用ListView應該自動滾動到最下面,這樣新添加的項目對用戶可見。

滾動鎖定狀態應該由典型鍵盤上的(很少使用的)「滾動鎖定」按鈕控制。

編輯:代碼有點...

<ListView x:Name="logMessagesListView" ItemsSource="{Binding ElementName=self, Path=LogMessages}"> 
    <ListView.View> 
     <GridView> 
      <GridView.Columns> 
       <GridViewColumn Header="Created" Width="100" DisplayMemberBinding="{Binding Created}"/> 
       <GridViewColumn Header="Level" Width="80" DisplayMemberBinding="{Binding LogLevel}"/> 
       <GridViewColumn Header="Message" Width="350" DisplayMemberBinding="{Binding Message}"/> 
      </GridView.Columns> 
     </GridView> 
    </ListView.View> 
</ListView> 
+0

你能發表一個實際的問題嗎?否則,這將被關閉,因爲你沒有要求任何東西...... –

+0

問題是在標題中,現在也在文本中。 – mola

回答

1

我會將日誌消息保存在ObservableCollection中,這兩個都用於自動UI通知和CollectionChanged事件。一旦添加新項目,檢查按鈕是否被點擊。如果是,則移至最後一項(或者可以使用事件參數的索引/項目屬性)。

您將需要將System.Windows.Forms添加到項目引用,以便您可以檢查按鈕狀態。

public partial class MainWindow : Window 
{ 
    private ObservableCollection<LogMessage> logMessages; 

    public MainWindow() 
    { 
     this.logMessages = new ObservableCollection<LogMessage>(); 

     /* add/load some data */ 

     this.logMessages.CollectionChanged += new NotifyCollectionChangedEventHandler(this.LogMessages_CollectionChanged); 

     this.LogMessages = CollectionViewSource.GetDefaultView(this.logMessages); 

     InitializeComponent(); 
    } 

    public ICollectionView LogMessages 
    { 
     get; 
     set; 
    } 

    private void LogMessages_CollectionChanged(object sender, NotifyCollectionChangedEventArgs e) 
    { 
     if (e.Action == NotifyCollectionChangedAction.Add) 
     { 
      if (System.Windows.Forms.Control.IsKeyLocked(System.Windows.Forms.Keys.Scroll)) 
      { 
       this.LogMessages.MoveCurrentToLast(); 
      } 
     } 
    } 
} 

public class LogMessage 
{ 
    public string Created 
    { get; set; } 

    public string LogLevel 
    { get; set; } 

    public string Message 
    { get; set; } 
} 
+1

謝謝。我修改了你的代碼,以避免通過使用if(Keyboard.GetKeyStates(Key.Scroll)!= KeyStates.Toggled)引用Forms。 logMessagesListView.ScrollIntoView(logMessagesListView.Items.GetItemAt(LogMessages.Count - 1));'代替 – mola

+0

真棒,感謝分享:) – ShadeOfGrey

0

在XAML將ScrollViewer.CanContentScroll="False"和應該努力!

+0

無論此屬性設置爲true還是false,我都沒有在行爲上看到任何差異。 – mola

+0

我的ListView中的滾動條被鎖定,直到我將'Enabled'屬性設置爲true。 – user20493

相關問題