2010-03-12 7 views
2

XamlReader를 사용하여 컨트롤의 내용을 변경하고 컨트롤의 컨테이너에 UIElement를 추가한다고 가정 할 때 어떤 이벤트가 발생해야합니까? SizeChanged가 실행되는 시간, LayoutUpdated가 변경되는 경우가 있습니다. 컨트롤의 내용을 변경하는 중임에도 불구하고 둘 다 발생하지 않는 다른 시간이 있지만.Silverlight에서 컨트롤의 내용을 변경할 때 발생하는 이벤트

내 경우, 현재 페이지에서 볼 수있는 내용에 대한 축소판보기를 생성하고 있습니다. 사용자는 페이지의 내용을 변경할 수 있으므로 그에 따라 축소판이 업데이트되어야합니다. LayoutUpdated, Loaded, SizeChanged에 대한 배선은 내용이 변경된 경우 항상 신뢰할 수있는 것은 아닙니다.

writeablebitmap을 사용하는 InvalidateThumbnail을 호출 하겠지만 내용을 설정 한 후에는 너무 빠르므로 결과적으로 빈 축소판이 생깁니다.

지금 내 해킹 (cringes)은 실제 새 콘텐츠를 렌더링하는 UI가 완료되기 전에 수 밀리 초를 기다려야하며 확실하게 미리보기 이미지를 만들 수 있습니다. 나는 오히려 매번 이벤트에 방아쇠를 당길 것이다.

가능합니까? 어떤 이벤트를 봐야합니까? CompositeTarget.Rendering을 보았습니다.하지만 원하는 것은 아닙니다.

답변

0

뒤에 이벤트가 독자적으로 발생하는 나는 ContentControl을 사용하고 XAML가 업데이트 될 때 수 있도록 양방향 데이터 바인딩을 사용할 수 있지만, 새 xaml을 삽입하면 제대로 작동합니다.

내 질문의 나머지 절반에서는 visualtree를 사용할 수 있고 컨트롤 수명주기를 참조 할 때 관련된 몇 가지 문제점을 찾아 냈습니다.

http://blogs.msdn.com/devdave/archive/2008/10/11/control-lifecycle.aspx [http://blogs.msdn.com/silverlight_sdk/archive/2008/10/24/loaded-event-timing-in-silverlight.aspx]

1

콘텐츠가 종속성 속성이므로 바인딩 된 속성이 변경 될 때 양방향 데이터 바인딩과 핸들을 사용할 수 있습니다. 다음은 XAML

<Grid x:Name="LayoutRoot"> 
    <StackPanel> 
     <ContentControl x:Name="ContentControl" Content="{Binding ContentProperty, Mode=TwoWay}"/> 
     <Button Click="Button_Click" Content="Change Content"/> 
    </StackPanel> 
</Grid> 
예를 들어

입니다

코드

public partial class MainPage : UserControl 
{ 
    public MainPage() 
    { 
     InitializeComponent(); 
     ContentControl.DataContext = new SomeObject(); 

    } 
    private void Button_Click(object sender, RoutedEventArgs e) 
    { 
     ContentControl.Content = XamlReader.Load("<TextBlock xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\" Text=\"Hello\"/>"); 
    } 
} 

public class SomeObject 
{ 
    private object _contentProperty = null; 
    public object ContentProperty 
    { 
     get 
     { 
      return _contentProperty; 
     } 
     set 
     { 
      _contentProperty = value; 
      MessageBox.Show("Content Changed"); 
     } 
    } 
} 
+0

내가 변화를 찾아 내 미리보기를 invaldiate하는 그리드의 Content 속성에 연결할 수있다, 그러나 내용을 변경에도 불구마다 발생하지 않는 이상입니다. 이 방법을 사용했지만 이상한 이유로 예상대로 작동하지 않습니다. http://amazedsaint.blogspot.com/2009/12/silverlight-listening-to-dependency.html – nyxtom

+0

Grid Control 대신 사용할 수 있습니다. – nyxtom

+0

여전히 축소판 문제는 해결되지 않지만 문제는 Silverlight의 잠재적로드 된 메서드가 작동하는 방식과 관련이 있습니다. – nyxtom

관련 문제