2011-09-22 3 views
6

XamlReader을 사용하여 xaml 파일을로드하고 함께 작업 할 FrameworkElement을 만듭니다.동적으로로드 된 xaml에 바인딩이 적용되지 않았습니다.

I로드와 같은 그것에 바인딩 식을 가지고있어 XAML : 나는 나는 WPF 창으로 다시 XamlReader.Load()에서 얻을 FrameworkElement를 배치하면

<TextBlock Text="{Binding DataContextTextProperty}" /> 

은, 모든 바인딩하는 것은 잘 작동합니다.

그러나이 경우에는 Laurent Bugnion's excellent article on creating PNGs from WPF/XAML을 사용하고 있습니다. XamlReader.Load()의 결과는 VisualBrush을 통해 PNG에 직접 작성되므로 바인딩 표현식을 호출하는 데 필요한 WPF 메커니즘이 무시 된 것 같습니다.

이것은 실제 바인딩이 실제로 XamlReader.Load()을 호출하는 것만으로 호출되지 않는다고 믿습니다. 또는 내가 시각 트리가 아닌 것으로서 알지 못하는 무언가 때문에 작동하지 않는다고 생각합니다. 기존의 시각적 트리 또는 기타에 FrameworkElement을 추가합니다.

이러한 바인딩을 호출 할 수있는 방법이 있습니까?

미리 감사드립니다.

+0

View로 이미지를 쓸 수있게하려면 레이아웃과 렌더링 패스가 필요하며 시각적 트리로로드 할 때만 가능하다고 생각합니다. 내가 틀렸다면 나를 바로 잡아라. FlowDocument가있는 XamlWriter가 조금 다른 이야기이지만. –

+0

@AngelWPF 나는 그것을 해결할 수 있었고 아래에 대답을 게시했다. 그것은 내가 원하는 방식으로 행동하는 것처럼 보이기 때문에, 내가 만든 순진한 실수가 아니라면, 함께 갈 것입니다. 나는 이것이 얼마나 효과가 있는지 안심할 수 없다. –

답변

4

I FIXED IT !! 에헴, 나를 설명 할 수

...

나는 지금에 도착하는 방법을 몰라,하지만 난 Initialization for Objects Not in an Object Tree에 관한 MSDN에 도움이 들리는 기사를 발견했다. 다음과 같이

Button b = new Button(); 
b.BeginInit(); 
b.Background = Brushes.Blue; 
b.Width = b.Height = 200; 
b.EndInit(); 
b.Measure(paperSize); 
b.Arrange(new Rect(paperSize)); 
b.UpdateLayout(); 

내가 위의 질문에서 언급 한 로랑에서 (다시, 우수) 예를 보았다, 그리고 XamlReader의 사용을 사용자 정의 : 그것에서

나는 다음 코드 예제를 발견

var element = (FrameworkElement)XamlReader.Load(xamlInput); 

element.BeginInit(); 
element.DataContext = dataContext; 

... 

element.Measure(renderingSize); 
element.Arrange(renderingRectangle); 

element.EndInit(); 
element.UpdateLayout(); 

나는 나의 dynamicall에서 지금은 바인딩 표현 (나는 UpdateLayout() 키를 믿는하지만 제거 과정에 의해) BeginInit(), EndInit()UpdateLayout() 추가 y-loaded xaml이 올바르게 작동하고 있습니다. 만세!

+0

당신이 전에 무엇을하지 않았는지는 분명하지 않다. 열쇠 비트가 뭐니? –

+0

아, 그래, 내 흥분에 나는 그것을 분명히 잊어 버렸다. 지금 대답을 업데이트했습니다. :) –