2012-01-04 62 views
4

我正在使用TreeView,並且有一些孩子進入它。我該如何防止我的WPF TreeView聚焦所選的TreeViewItem

問題是,當我選擇一個寬度高於TreeView的子級時,滾動automaticaly會移動以顯示所有選定的項目,我想禁用此行爲!

我已經嘗試處理RequestBringIntoView事件,但它似乎不工作!

感謝您的幫助!

這裏是XAML:

<Window x:Class="WpfApplication2.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     Title="MainWindow" Height="350" Width="350"> 
    <Grid> 
     <TreeView RequestBringIntoView="TreeView_RequestBringIntoView"> 
      <TreeViewItem Header="Monster huge tree view item Header OMG WTF IS THAT BBQ"/> 
      <TreeViewItem Header="TreeView Elem 1"> 
       <TreeViewItem Header="TreeView Elem 1"/> 
       <TreeViewItem Header="TreeView Elem 1"/> 
       <TreeViewItem Header="TreeView Elem 1"/> 
       <TreeViewItem Header="TreeView Elem 1"> 
        <TreeViewItem Header="TreeView Elem 1"/> 
        <TreeViewItem Header="TreeView Elem 1"/> 
        <TreeViewItem Header="TreeView Elem 1"/> 
        <TreeViewItem Header="TreeView Elem 1"/> 
        <TreeViewItem Header="TreeView Elem 1"/> 
        <TreeViewItem Header="TreeView Elem 1"> 
         <TreeViewItem Header="TreeView Elem 1"/> 
         <TreeViewItem Header="TreeView Elem 1"/> 
         <TreeViewItem Header="TreeView Elem 1"/> 
         <TreeViewItem Header="TreeView Elem 1"> 
          <TreeViewItem Header="TreeView Elem 1"/> 
          <TreeViewItem Header="TreeView Elem 1"/> 
          <TreeViewItem Header="TreeView Elem 1"/> 
          <TreeViewItem Header="TreeView Elem 1"> 
           <TreeViewItem Header="TreeView Elem 1"/> 
           <TreeViewItem Header="TreeView Elem 1"/> 
           <TreeViewItem Header="TreeView Elem 1"/> 
           <TreeViewItem Header="TreeView Elem 1"> 
            <TreeViewItem Header="TreeView Elem 1"/> 
            <TreeViewItem Header="TreeView Elem 1"/> 
            <TreeViewItem Header="Monster huge tree view item Header OMG WTF IS THAT BBQ"> 
             <TreeViewItem Header="TreeView Elem 1"/> 
             <TreeViewItem Header="TreeView Elem 1"> 
              <TreeViewItem Header="Monster huge tree view item Header OMG WTF IS THAT BBQ"/> 
             </TreeViewItem> 
            </TreeViewItem> 
           </TreeViewItem> 
          </TreeViewItem> 
         </TreeViewItem> 
        </TreeViewItem> 
       </TreeViewItem> 
      </TreeViewItem> 
      <TreeViewItem Header="TreeView Elem 1"/> 
      <TreeViewItem Header="TreeView Elem 1"/> 
      <TreeViewItem Header="TreeView Elem 1"/> 
      <TreeViewItem Header="TreeView Elem 1"/> 
      <TreeViewItem Header="TreeView Elem 1"/> 
      <TreeViewItem Header="TreeView Elem 1"/> 
     </TreeView> 
    </Grid> 
</Window> 

而且代碼behing CS:

using System.Windows; 

namespace WpfApplication2 
{ 
    /// <summary> 
    /// Interaction logic for MainWindow.xaml 
    /// </summary> 
    public partial class MainWindow : Window 
    { 
    public MainWindow() 
    { 
     InitializeComponent(); 
    } 

    private void TreeView_RequestBringIntoView(object sender, RequestBringIntoViewEventArgs e) 
    { 
     e.Handled = true; 
    } 
    } 
} 
+2

+1優秀長TreeView項名稱 – 2012-01-04 09:53:05

回答

4

您需要處理的TreeViewItem不是TreeViewRequestBringIntoView事件。

您需要使用事件設置器爲數據綁定項目執行此操作,如下所示。

<TreeView> 
    <TreeView.ItemContainerStyle> 
     <Style TargetType="TreeViewItem"> 
      <EventSetter Event="RequestBringIntoView" Handler="Null_Handler"/> 
     </Style> 
    </TreeView.ItemContainerStyle> 
</TreeView> 

或類似下面的XAML中定義的例子

<TreeView> 
    <TreeViewItem Header="Monster huge tree view item Header OMG WTF IS THAT BBQ" RequestBringIntoView="Null_Handler"/> 
    <TreeViewItem Header="TreeView Elem 1" RequestBringIntoView="Null_Handler"> 
</TreeView> 

Null_Handler定義如下

private void Null_Handler(object sender, RoutedEventArgs e) 
{ 
    e.Handled = true; 
} 
+0

這是一個不錯的答案兄弟,謝謝你:) – 2012-04-20 14:22:11

+1

不客氣,我不得不爲我正在進行的一個項目做這件事,而當我正在尋找答案時,你的問題是我能找到的唯一相關事情。 – NtscCobalt 2012-04-20 18:50:16