2011-02-03 3 views
2

타임 라인 WPF 컨트롤을 만들고 싶습니다. (http://www.taterboy.com/blog/images/MotionEditor/classic_vs_custom.png) 타임 라인 종류 - 애니메이션 용 편집).그리드를 사용하여 타임 라인 컨트롤을 만들 가능성이

필자는 PaintEvent 핸들러에서 모든 것을 수동으로 드로잉하여 프로토 타입을 만들었지 만 효과적이지만 유연하거나 매력적이지 않은 가장 효율적인 방법이었습니다.

WPF를 사용하여 완벽한 기능을 갖춘 컨트롤을 만들고 타임 라인으로 그리드 컨트롤을 사용할 가능성에 대해 궁금해했습니다. 키 프레임이있을 때 음영 처리 된 각 이산 시간 위치와 행별로 트랙이 있습니다.

저는이 컨트롤에 대해 아무 것도 모릅니다. 그리고 WPF를 처음 사용하는 사람입니다. 누군가이 아이디어에 대해 의견을 말할 수 있는지 궁금합니다.

특히 성능 측면에서 볼 때 그리드는 이런 식으로 사용되도록 설계 되었습니까? 아니면 디자인 타임에 GUI를 구성하는 것이 더 낫습니까? 많은 수의 요소를 사용하여 구성을 동적으로 수정하려고하면 심각한 성능 저하가 발생합니까? (~ 2000-3000 가능성이 최악의 경우가 될 것입니다)

그리드를 수정하는 것이 얼마나 쉬운가요? 예를 들어 세포를 음영 처리하는 것과 같은 일을하는 것입니까? Grid.NumberOfColumns = x의 단순한 문제입니까 아니면 모든 요소가 고유 한 개체 여야합니까?

모든 통계를 제공해 주셔서 감사합니다.

답변

2

확실히 Grid을 사용하면 XAML 내에서 Grid으로 작업하고 코드 배후가 상당히 쉽습니다.

<Grid Name="MyGrid"> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition Width="*"></ColumnDefinition> 
     </Grid.ColumnDefinitions> 
     <Grid.RowDefinitions> 
      <RowDefinition Height="*"></RowDefinition> 
     </Grid.RowDefinitions> 
    </Grid> 

    MyGrid.ColumnDefinitions.Add(new ColumnDefinition() 
       { Width = new GridLength(0, GridUnitType.Star) }); 

그런 다음 음영을 돌볼 수있는 Rectangle를 사용할 수 있습니다. 당신이 다양한 요인에 따라로받을 수 있습니다 그러나

<Rectangle Grid.Column="0"></Rectangle> 

문제는 성능에 내려 올 것이다. 성능이 저해되는 경우 다른 방법은 ItemsControl 내의 VirtualizingStackPanel을 기본 레이아웃 컨테이너로 사용하고 UI virtualization을 지정하는 것입니다. Data virtualization도 문제가 될 수 있으며 VirtualizingStackPanel을 통해 UI 가상화 후 해결해야합니다. ItemsControl을 사용하면 상품에 DataTemplate을 제공 할 수 있으며 크기에 대한 초기 진술에 따라 Grid을 사용하면 장기적으로 더 나은 접근 방식이 될 것입니다.

Expression Blend는 WPF를 사용하여 제작되었으며 애니메이션을 광범위하게 지원합니다. 인터랙티브하고 튼튼한 타임 라인을 포함하여 그렇게 할 수 있습니다. WPF를 이해하는 것이 핵심입니다. 그렇지 않으면 이해가 커짐에 따라 초기 접근 방식을 리팩터링하게됩니다. 가능하다면 WPF가 WinForms와 어떻게 다른지에 대한 훌륭한 토대를 얻으십시오 (과감한 것입니다).

+0

답장을 보내 주셔서 감사합니다. WPF에서 더 많은 것을 읽는 동안 시간을 ​​보냈습니다. 그리고 더 많이 할수록 WinForms와는 다른 점을 이해할 수있을뿐만 아니라 더 감동했습니다. 나는 virtualizingStackPanel을 사용하여 본질적으로 잠재적 인 키 프레임의 '정적 테이블'을 만든 다음 사용자가 '뷰어'영역 아래에서이 키 프레임을 원하는대로 작업하도록 확장 및 이동할 수 있다고 생각합니다. 권리. 이와 같은 컨트롤을 사용하려면 각 키 프레임 또는 비키 프레임 섹션을 사각형 객체로 나타내야합니다.채울 때 이것을 재사용 할 수 있습니까? – sebf

+0

(마지막 문장이 명확하지 않은 경우 (글자 한도), '키 프레임'을 나타내는 하나의 객체가 있고 '아무것도'를 나타내지 않는 객체가있는 경우, 가로 패널에 10을 입력하십시오. '사각형이 없습니다' 해당 시점의 키 프레임을 나타 내기위한 하나의 '키 프레임 사각형') 감사합니다! – sebf

+0

@sebf 작동 할 수 있습니다 ... 사각형은 시각적입니다. 컨테이너가 아니라 컨테이너 내에서 재사용 및 저장 될 수 있습니다. 키 프레임에 내용이 포함되도록하려면 Border/Grid로 포장해야합니다. ThinkGrid -> Rectangle/TextBlock 여기서 Rectangle/TextBlock은 트리에서 동일한 레벨에 있고 Rectangle는 시각적 요소를 제공하지만 TextBlock은 내용을 제공합니다. –

관련 문제