2010-08-24 4 views
1

나는 약간의 피클에있다. 차트를 생성해야 (사용자가 볼 수 없도록 화면에서 꺼내야 함) 이러한 차트를 저장 가능하게 만들 필요가 있습니다. 이것은 기초를 설정하고로드 된 차트에서 이미지를 만드는 것을 의미합니다. 나는 columnseries 차트 fyi에 대해 얘기하고 있습니다 :)silverlight charting 인쇄용 초기 애니메이션 없음 (일련의 데이터 인쇄)

문제는 내장형이지 네이밍 애니메이션입니다. 차트가 "로드 된"이벤트를 트리거하므로 저장 할 이미지를 생성하므로 차트에 아직 아무 것도 없습니다.

내가 시도한 몇 가지 : 이미지의 건물을 지연

  • 렌더링의 끝에서 트리거 (하지만 방탄 아니에요) 수

    • 다른 이벤트

    까지 내 모든 인터넷 검색은 애니메이션없이 데이터 포인트를 retemplating 함께 올라와 (어떤 중요한 문제가 어떤 참조를 찾을 수 없다, 내가 찾을 수있는 유일한 것은 StylePalette에 관한 무언가, 아무데도 어셈블리에서 찾을 수 있습니다)

    이 부분에 대한 도움이 필요하시면 크게 감사하겠습니다.

    편집 : 나는 나 사용자 정의 컨트롤에이를 넣어 만든 내 주요 MVVM 용액에 이식

    . 우리는 동료와 협력하여 일련의 데이터 (목록 목록)에서 일련의 이미지 (WriteableBitmaps 형식)를 생성해야한다고 결정했습니다.

    이 작업은 목록을 실행하고 필요한 것을 렌더링하여 수행 할 수 있습니다. 이미지가 클라이언트 측에서 생성 된 문서에 추가되어야하므로 가시적 인 시각 트리의 외부에 물론 존재합니다.

    이렇게하면 다음 번에 문제가 발생합니다. LayoutUpdated 이벤트를 구독 할 수 없기 때문에 (거의 모든 방법으로 트리거되기 때문에) 조금 붙어 있습니다. 새 데이터가 지속적으로로드되는 차트에는 차트가 하나 있는데,로드 된 이벤트는 한 번만 발생합니다. 스크린 샷을 가져 와서 새로운 데이터를 넣을 수 있도록 모든 데이터가 렌더링되었음을 알리는 솔루션 (일종의 이벤트)이 필요합니다 ...

    도움?

  • 답변

    0

    이 링크는 당신이 차트를 인쇄 할 때와 같은 유사해야 직면하고있는 문제로 관심이있을 수 있습니다 http://www.davidpoll.com/2010/04/16/making-printing-easier-in-silverlight-4/

    기본적으로 (당신은 다시 템플릿 시리즈 수없는 가정 [Expression Blend를 훨씬 더 쉽게!] SkipToFill()을 호출하여 비주얼 트리를 탐색하고 스토리 보드를 "완료"할 수 있습니다. 위에서 언급 한 링크에서

    : 내가 무슨 짓을했는지

    private static void DriveAnimationsToCompletion(FrameworkElement element) 
        { 
         if (element == null) 
          return; 
         var groups = VisualStateManager.GetVisualStateGroups(element); 
         foreach (VisualStateGroup group in groups) 
         { 
          foreach (
           Storyboard board in group.Transitions.Cast<VisualTransition>().Select(trans => trans.Storyboard) 
            .Concat(group.States.Cast<VisualState>().Select(state => state.Storyboard)) 
            .Where(board => board.GetCurrentState() != ClockState.Stopped)) 
          { 
           board.SkipToFill(); 
          } 
         } 
         foreach (
          FrameworkElement child in 
           Enumerable.Range(0, VisualTreeHelper.GetChildrenCount(element)).Select(
            index => VisualTreeHelper.GetChild(element, index)).OfType<FrameworkElement>()) 
          DriveAnimationsToCompletion(child); 
        } 
    
    +0

    위에 게시 한 링크를 보았습니다. 코드 스 니펫을 시도했는데 웬일인지 제 끝에서별로 도움이되지 않습니다. 어디서나 애니메이션을 채우기 위해 코드를 실행하면 드로잉 캔버스와 전설이 계속 생깁니다. 왜 렌더링 이벤트가 차트에 삽입되지 않았습니까? : –

    +0

    괜찮 았어.하지만 그게 옳은 해결책보다 해킹이라고 생각하니 거의 좋았어. Blend에게 데이터 포인트를 다시 템플릿으로 제공하는 것이 좋습니다.) –

    0

    이 스타일을 추가 할 수 있습니다 :

    <Style x:Key="customColumnDataPoint" TargetType="chartingToolkit:ColumnDataPoint"> 
        <Setter Property="Background" Value="DarkBlue"/> 
        <Setter Property="BorderBrush" Value="Black"/> 
        <Setter Property="BorderThickness" Value="1"/> 
        <Setter Property="IsTabStop" Value="False"/> 
        <Setter Property="Template"> 
         <Setter.Value> 
          <ControlTemplate TargetType="chartingToolkit:ColumnDataPoint"> 
           <Border 
            BorderBrush="{TemplateBinding BorderBrush}" 
            BorderThickness="{TemplateBinding BorderThickness}" 
            x:Name="Root"> 
            <VisualStateManager.CustomVisualStateManager> 
             <ei:ExtendedVisualStateManager/> 
            </VisualStateManager.CustomVisualStateManager> 
            <VisualStateManager.VisualStateGroups> 
             <VisualStateGroup x:Name="CommonStates"> 
              <VisualStateGroup.Transitions> 
               <VisualTransition GeneratedDuration="0"/> 
              </VisualStateGroup.Transitions> 
              <VisualState x:Name="Normal"/> 
              <VisualState x:Name="MouseOver"> 
              </VisualState> 
             </VisualStateGroup> 
             <VisualStateGroup x:Name="SelectionStates"> 
              <VisualStateGroup.Transitions> 
               <VisualTransition GeneratedDuration="0"/> 
              </VisualStateGroup.Transitions> 
              <VisualState x:Name="Unselected"/> 
              <VisualState x:Name="Selected"> 
               <Storyboard> 
                <DoubleAnimation 
                 Storyboard.TargetName="SelectionHighlight" 
                 Storyboard.TargetProperty="Opacity" 
                 To="0.6" 
                 Duration="0"/> 
               </Storyboard> 
              </VisualState> 
             </VisualStateGroup> 
             <VisualStateGroup x:Name="RevealStates"> 
              <VisualStateGroup.Transitions> 
               <VisualTransition GeneratedDuration="0"/> 
              </VisualStateGroup.Transitions> 
              <VisualState x:Name="Shown"> 
               <Storyboard> 
                <DoubleAnimation 
                 Storyboard.TargetName="Root" 
                 Storyboard.TargetProperty="Opacity" 
                 To="1" 
                 Duration="0"/> 
               </Storyboard> 
              </VisualState> 
              <VisualState x:Name="Hidden"> 
               <Storyboard> 
                <DoubleAnimation 
                 Storyboard.TargetName="Root" 
                 Storyboard.TargetProperty="Opacity" 
                 To="1" 
                 Duration="0"/> 
               </Storyboard> 
              </VisualState> 
             </VisualStateGroup> 
            </VisualStateManager.VisualStateGroups> 
            <Grid 
             Background="{TemplateBinding Background}"> 
             <Rectangle> 
              <Rectangle.Fill> 
               <LinearGradientBrush> 
                <GradientStop 
                 Color="#77ffffff" 
                 Offset="0"/> 
                <GradientStop 
                 Color="#00ffffff" 
                 Offset="1"/> 
               </LinearGradientBrush> 
              </Rectangle.Fill> 
             </Rectangle> 
             <Border 
              BorderBrush="#ccffffff" 
              BorderThickness="1"> 
              <Border 
               BorderBrush="#77ffffff" 
               BorderThickness="1"/> 
             </Border> 
             <Rectangle x:Name="SelectionHighlight" Fill="Red" Opacity="0"/> 
             <Rectangle x:Name="MouseOverHighlight" Fill="White" Opacity="0"/> 
            </Grid> 
            <ToolTipService.ToolTip> 
             <ContentControl Content="{TemplateBinding FormattedDependentValue}"/> 
            </ToolTipService.ToolTip> 
           </Border> 
          </ControlTemplate> 
         </Setter.Value> 
        </Setter> 
    </Style> 
    

    는 방탄 솔루션을하지 않습니다 아직 아무것도 애니메이션을 주름하지만를 ...

    아직 가입 할 일정이 필요합니다. 내 원래 질문을 편집하여 더 자세한 내용을 추가했습니다 ...

    관련 문제