2013-04-15 3 views
2

나는 Popup 내에 TreeView을 가지고 있습니다. 사용자는 TreeView에서 선택하고 열려있는 노드를 볼 수 있습니다. 코드는 다음과 같습니다.내 팝업이 열릴 때 왜 treeview의 전체 내용이 표시되지 않습니까?

<Popup PlacementTarget="{Binding ElementName=TBXProjection}" Style="{StaticResource ProjPopupStyle}" VerticalOffset="27" HorizontalOffset="-262" Margin="0,0,465,279" Name="PopupProjection" AllowsTransparency="True" Placement="Top"> 
    <Grid> 
     <Border BorderThickness="2" Background="DodgerBlue" BorderBrush="DodgerBlue" Padding="0" CornerRadius="6"> 
      <ScrollViewer Height="275" Name="scrollViewer1" Width="260" BorderBrush="Black" Background="DodgerBlue"> 
       <TreeView Name="dirTree" ItemsSource="{Binding Source={StaticResource xmldata}, XPath=.}" VirtualizingStackPanel.IsVirtualizing="False" VirtualizingStackPanel.VirtualizationMode="Standard" SelectedItemChanged="dirTree_SelectedItemChanged"/> 
      </ScrollViewer> 
     </Border> 
    </Grid> 
</Popup> 

다음은 작동 원리입니다. 여기 내가해야 할 일이있다.

Here is what the popup/treeview is doingHere is what it's supposed to do.

나는 사용자가 수동으로 아래로 스크롤하여 정보를 얻을 수 있습니다 실현,하지만 그들은을 목적으로 그 (예 : 와이오밍의 경우)를 선택하면 다음 다른 아이를 선택합니다. 스크롤을 자동으로 열어야 선택이 가능합니다.

누군가 내가 비틀 필요가있는 올바른 자산으로 안내 할 수 있습니까?

답변

1

나는 당신이 원하는 것을하는 어떤 재산을 모른다.

TreeViewItem 마지막으로 BrinIntoView 메서드를 사용할 수 있습니다. 노드를 열 때마다 마지막 자식 요소가 표시되는지 확인하고 사용하지 않으면 링크 된 메서드를 사용하십시오. 여기에 귀하의 목표를 받아야 코드의 수정이다 :

XAML 부분 :

<TreeView Name="dirTree" ItemsSource="{Binding Source={StaticResource xmldata}, XPath=.}" VirtualizingStackPanel.IsVirtualizing="False" 
             VirtualizingStackPanel.VirtualizationMode="Standard" SelectedItemChanged="dirTree_SelectedItemChanged" TreeViewItem.Expanded="ShowMyLastChild"/> 

C 번호 부분 : 내가하는 것 트 리뷰에 연결된 이벤트를 추가 한 위의 코드에서

private void ShowMyLastChild(object sender, RoutedEventArgs e) 
    { 
     ((TreeViewItem)((TreeViewItem)(e.Source)).Items.GetItemAt(((TreeViewItem)(e.Source)).Items.Count - 1)).BringIntoView(); 
    } 

자식 노드가 확장 될 때마다 발생합니다. 이벤트 핸들러는 확장 된 자식 노드에서 마지막 자식 노드를 확인하여이를 뷰로 가져옵니다. 이렇게하면 데이터 소스에 관계없이 완료됩니다.

추가 도움이 필요하시면 언제든지 문의 해 주시기 바랍니다.

+0

트리 뷰는 xml 문서에 바인딩됩니다. 선택 항목이 최종 하위 노드인지 확인하는 SelectedItemChanged가 이미 있습니다. 다음은 코드입니다 :'code' XmlElement i = (XmlElement) dirTree.SelectedItem; if (i.Name.Equals ("Zone")) {'code'이 작업을하기 위해 SelectedItem에서 BringIntoView를 사용하는 간단한 예제를 찾으려고합니다. 모든 예제가 도움이 될 것입니다. – Nallware

+0

나는 내 대답을 편집했습니다. 나는 이것이 당신을 위해 속임수를 사용하기를 바랍니다. – wpfnoop

+0

'System.Windows.Controls.TreeView'형식의 개체를 캐스팅하려면 _Unable을 가져오고 'System.Windows.Controls.TreeViewItem'을 입력하십시오 ._ 수치입니다. 계속 찾아 볼 것이지만 모든 노력에 감사드립니다. – Nallware

관련 문제