2012-11-01 1 views
1

사용자 지정 활동 디자이너를 만들었지 만 'header'부분 (기본적으로 ModelItem.DisplayName이 표시됨)을 제어하고 싶었습니다. 지금까지 알 수있는 것처럼이 작업을 수행하는 유일한 방법은 디자이너는 ActivityDesigner가 아닌 WorkflowViewElement에서 가져옵니다. 그래서, 그것은 작동하는 것처럼 보이고 모든 것이 잘됩니다. 단, WF4.5의 새로운 Annotations 기능을 지원하고 싶습니다.
디자인 서피스의 워크 플로우 요소에 주석을 추가하면 실제 주석 요소와 주석을 추가하는 요소에 아이콘이 추가되므로 모든 사용자 정의 WorkflowViewElement에 지원할 추가 요소가 있어야합니다. 이 행동. 누구든지 도와 줄 수 있습니까?사용자 정의 WorkflowViewElement에서 WF4.5 주석을 지원하는 방법은 무엇입니까?

감사

답변

1

내가 생각은, 주석이 첨부 된 속성과 워크 플로우 정의에 저장됩니다. 워크 플로의 xaml에서 특수 효과가 보이는 모양은 다음과 같습니다.

<Sequence 
    xmlns:derp="http://schemas.microsoft.com/netfx/2010/xaml/activities/presentation" 
    derp:Annotation.AnnotationText="This is an annotation!"> 

다른 첨부 된 속성과 마찬가지로 참조하십시오. 그것을 제외하고. 해당 첨부 된 워크 플로 속성이 아닌 종속성 속성. 즉, 첨부 된 부동산 서비스와 Annotation class을 통해 작동합니다. ModelItem에서 주석 텍스트를 가져오고 설정하는 것은 간단합니다 (아래에서 다룹니다).

실제로 주석을 지원하는 것은 그리 어렵지 않습니다. UI가 쓰레기처럼 보이면 괜찮습니다. 빠르고 지저분한 구현입니다. UI에서

은, 주석 텍스트

<sap:WorkflowViewElement 
    x:Class="AnnotationSupport.MyActivityDesigner" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:sap="clr-namespace:System.Activities.Presentation;assembly=System.Activities.Presentation" 
    xmlns:ann="clr-namespace:System.Activities.Presentation.Annotations;assembly=System.Activities.Presentation" 
    xmlns:sapv="clr-namespace:System.Activities.Presentation.View;assembly=System.Activities.Presentation" 
    x:Name="root" 
    MinWidth="100" 
    MinHeight="100"> 
    <Grid Background="red"> 
     <Grid.RowDefinitions> 
      <RowDefinition 
       Height="auto" /> 
      <RowDefinition /> 
     </Grid.RowDefinitions> 
     <Expander 
      IsExpanded="False">   
      <!-- HERE SHE BLOWS --> 
      <TextBox 
       Text="{Binding ModelItem.AnnotationText}" /> 
     </Expander> 
      <TextBox 
      Grid.Row="1" 
      Text="{Binding ModelItem.Text}" 
      Margin="10" /> 
    </Grid> 
</sap:WorkflowViewElement> 

때마다 다른 모든 재산과 같은 주석 텍스트 변경되면 ModelItem의하여 PropertyChanged 이벤트가 발생, 유지 및 편집에 대한 몇 가지 컨트롤을 추가 할 수 있습니다. 당신은 코드에서 그것을 잡고 싶다면, 가장 간단한 방법은 dynamic에 ModelItem 캐스팅하는 것입니다

private void SetAnnotationLol(string newValue) 
{ 
    if(ModelItem != null) 
     ((dynamic)ModelItem).AnnotationText = newValue; 
} 

이제, FX는 활동이처럼 당신이 좋은 UI를 만들려면 ... 음 ..

주석의 표시 및 편집을 처리하기 위해 사용자 정의 Adorner을 작성하겠습니다. 사실 처음 보는 것처럼 어렵지는 않습니다. 아직 수행하지 않았다면 여기 기회가 있습니다.

+0

대단한 의지 - 시간을내어 주셔서 감사합니다. WPF 책을 여는 데 더 많은 시간을 할애해야 할 것 같습니다 (보통 열어서 떨리고 다시 닫으십시오!) –

+0

@TobyCouchman 그다지 나쁘지 않습니다. 코드화 된 양식, html 및 wpf 및 wpf가 가장 좋습니다. 네, 학습 곡선이 있지만 StackOverflow가 있습니다! – Will

관련 문제