2012-02-15 3 views
1

콘텐트를 대화 상자에 넣고 있습니다. 이 대화 상자의 relization으로 인해 나는 그것을 필요로 할 때마다 (Show/Hide가 트릭을하지 않을 때마다) 생성해야합니다. 내 통제가 필드 내용을 기억하고 싶습니다. 내가 이것을 달성하기 위해 viewmodel을 적용 할 수있는 동안 나는 필드로 컨트롤을 유지하고 필요할 때마다 대화 상자의 내용으로 유지하는 것을 선호합니다. 하지만 다음과 같은 오류가 발생합니다 :컨트롤을 여러 컨트롤의 내용으로 설정합니다.

"지정된 요소는 이미 다른 요소의 논리적 하위입니다. 먼저 연결을 끊습니다."

대화 상자 창을 닫기 전에 null을 사용하려고했지만 문제가 해결되지 않았습니다. 내가 할 수 있는게 있습니까?

답변

1

설정 window.Content = null 나를 위해 잘 작동합니다. 내가 사용하는 코드는 다음과 같은 :

public partial class MainWindow : Window 
{ 
    TextBlock textBlock = new TextBlock(); 
    public MainWindow() 
    { 
     InitializeComponent(); 
    } 

    private void Button_Click(object sender, RoutedEventArgs e) 
    { 
     TestWindow testWindow = new TestWindow(); 
     testWindow.Content = textBlock; 
     testWindow.Closing += HandleTestWindowClosing; 
     testWindow.Show(); 
    } 

    void HandleTestWindowClosing(object sender, System.ComponentModel.CancelEventArgs e) 
    { 
     var testWindow = sender as TestWindow; 
     if(testWindow!=null) 
     { 
      testWindow.Content = null; 
      testWindow.Closing -= HandleTestWindowClosing; 
     } 
    } 
} 
+0

흠, 내 방법의 모든 것을 대신 이벤트 hadler 콘텐츠 설정을 가하고 후 잘 작동합니다. 감사! – noaRAVE

0

체크 아웃 다음 작업 예. 그것은 정확히 당신의 시나리오는 아니지만 꽤 가까운 것입니다. 열쇠는 'Child'속성을 null로 설정하는 것입니다. TextBox를 위쪽 테두리에서 아래쪽 테두리로 이동합니다.

<Window x:Class="SO.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     Title="MainWindow" Height="350" Width="525"> 
    <Grid> 
     <Grid.RowDefinitions> 
      <RowDefinition /> 
      <RowDefinition /> 
      <RowDefinition /> 
     </Grid.RowDefinitions> 
     <Button Grid.Row="0" Click="Move_Click">Move</Button> 
     <Border x:Name="topBorder" Grid.Row="1"> 
      <TextBlock x:Name="ctrl">Some Text Block</TextBlock> 
     </Border> 
     <Border x:Name="bottomBorder" Grid.Row="2"/> 
    </Grid> 
</Window> 

뒤에 코드 :

using System.Windows; 

namespace SO 
{ 
    public partial class MainWindow :Window 
    { 
     public MainWindow() 
     { 
      InitializeComponent(); 
     } 

     private void Move_Click(object sender, RoutedEventArgs e) 
     { 
      this.topBorder.Child = null; 
      this.bottomBorder.Child = this.ctrl; 
     } 
    } 
} 
관련 문제