2013-07-11 1 views
0

DataGrid에 임의의 열이 추가 된 코드 뒤에 코드를 만들면 DataGrid에 대해 시각적 트리를 만들 수 없습니다. 특정 행의 CellStyle 속성을 동적으로 편집해야하므로 런타임에 DataGrid 개체에 VisualTreeHelper 함수를 사용할 수 있기를 원합니다. 동적으로 생성 된 DataGrid 개체의 시각적 트리를 어떻게 만들 수 있습니까? 디자인 타임에 XAML을 사용하여 빌드하면 트리가 문제없이 빌드되지만 동적 인 경우에이를 수행하는 방법을 잘 모르겠습니다. WPF 트리 비주얼 그냥 내가 어떤 부모가없는로 생성 된 데이터 그리드를 보여줍니다WPF : 동적으로 생성 된 DataGrid 객체에 대한 시각적 트리를 만드는 방법은 무엇입니까?

Class MainWindow 
     Dim dg As DataGrid 
     Dim col As DataGridTextColumn 

     Sub New() 
      InitializeComponent() 

      col.Header = "HEAD0RR" 
      dg.Columns.Add(col) 
      MainGrid.Children.Add(dg) 
     End Sub 
    End Class 

그러나 :

<Window x:Class="MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="MainWindow" Height="350" Width="525"> 
     <Grid Name="MainGrid" /> 
    </Window> 
등 뒤에있는 코드와

: 같은

내 문제에 대한 사소한 샘플 케이스입니다 또는 자식, 및 VisualTreeHelper 함수 따라서 작동하지 않습니다.

+0

동적으로 열을 작성해야 할 경우 ArrangeOverride를 재정의하려고합니다. 사용자가해야 할 일은 대체 할 수있는 스타일을 변경하는 것입니다. OnRowLoaded – jfin3204

+0

그냥 받아 들인 대답 대신 간단한 해킹을 추가하거나 제안 된대로 OnRowLoaded를 무시하고 싶습니다. 비주얼 트리를 강제로 생성하기 위해 요소의 focus() 메소드를 호출하는 것입니다. –

답변

0

나무는 내가 디자인 타임에 하나를 구축하는 XAML을 사용하는 경우 아무런 문제없이 내장,하지만 동적 경우에이 작업을 수행하는 방법을 잘 모르겠습니다된다.

우선 "XAML"과 "동적"은 상호 배타적 인 것이 아닙니다. 절차 (VB) 코드를 통해 그리드를 만들고 CellStyles에 액세스해야한다는 것이 절대적으로 확실합니까? XAML에는 시각적 트리를 명시 적으로 검사하는 것보다 쉽고, 유지 관리가 쉽고, 동적 인 옵션이 여러 가지 있습니다. 예를 들어

시각적 트리에서 항목을 볼 수없는 이유는 다음과 같습니다. 언제 액세스하려고합니까? 즉시 채워지지 않습니다. Loaded 이벤트 또는 DataGrid의 이벤트 StatusChanged을 기다려야 할 수 있습니다.

+0

사용자 입력에 대한 응답으로 새로운 DataGrid를 생성해야하는 디자인이 있습니다. 나는 새로 생성 된 DataGrid를 포함하는 새로운 tabitem을 추가하는 tabcontrol에서이 작업을 수행하고 있습니다. 이 문제는 현재 개발중인 응용 프로그램에 필요하며 XAML에서이 작업을 수행 할 수있는 방법이 확실하지 않았습니다. 새로운 DataGrid 개체에서 생성 된 특정 행의 cellstyle 속성을 변경하기 위해 응용 프로그램 논리에서 생성 된 후 DataGrid의 자식 요소에 액세스하려고합니다. –

+0

"특정 행"은 표시되는 데이터의 종류에 의해 식별된다고 가정하므로 DataTriggers를 사용하여 스타일 차이를 정의 할 수 있어야합니다.열을 동적으로 생성해야하는 경우 XAML에서 DataTriggers를 사용하여 실제 스타일을 정의하고 'Col.CellStyle = FindResource ("SpecialCellStyle")'과 같은 작업을 수행 할 수 있습니다. "SpecialCellStyle"은 XAML 리소스의'x : Key '입니다. . – nmclean

+0

XAML을 사용하여 새 DataGrid 개체를 만들고 원하는대로 포맷 할 수 있도록하는 방법을 알아내는 데 도움이되는 리소스를 가르쳐 주시겠습니까? 그러면 코드 숨김 작업을 할 필요가 없습니다. 나는 또한 내가 만든 tabcontrol에 대한 itemsource로 사용하는 tablist에 추가되는 tabitem에 추가하는 콘텐츠와 비슷한 문제를 겪고 있습니다. 내가 만든 tabitem을 포함하는 모든 것들이 나를 위해 자식 또는 부모 개체를 조작하는 데 사용되는 시각적 트리를 생성하지 않습니다. –