2011-09-01 3 views
0

내 (단순화 된) 유효성 검사 템플릿은WPF에서 오류 adorner로 Controls.Popup 사용 문제

입니다.
<Grid> 
    <Border x:Name="ErrorAdorner" 
      BorderBrush="Red"> 
    <AdornedElementPalceHolder /> 
    </Border> 
    <Popup x:Name="ErrorPopup" 
     PalcementTarget="{Binding ElementName=ErrorAdorner}" 
     Placement="Bottom" 
     StaysOpen="false" 
     IsOpen="true"> 
    <Grid> 
     <TextBloxk Text="Error!!!" /> 
    </Grid> 
    </Popup> 
</Grid> 
<Grid> 
    <Border x:Name="ErrorAdorner" 
      BorderBrush="Red"> 
    <AdornedElementPalceHolder /> 
    </Border> 
    <Popup x:Name="ErrorPopup" 
     PalcementTarget="{Binding ElementName=ErrorAdorner}" 
     Placement="Bottom" 
     StaysOpen="false" 
     IsOpen="true"> 
    <Grid> 
     <TextBloxk Text="Error!!!" /> 
    </Grid> 
    </Popup> 
</Grid> 
장식 된 요소는 일반적으로 텍스트 상자입니다.

이 방법의 문제점은 텍스트 상자 안쪽을 클릭하자마자 ErrorPopup이 사라지고 ErrorAdorner는 계속 표시됩니다. 바람직한 행동은 두 가지가 모두 보여 져야한다는 것입니다.

시도한 것 :

  1. ErrorPopup에서 StaysOpen을 true로 설정합니다. 문제 : 오류가 표시 될 때 상위 창을 크기 조정/이동할 때 ErrorPopup은 동일한 위치에 유지되며 텍스트 상자와 함께 이동하지 않습니다.
  2. 텍스트 상자 (장식 요소) 및 오류 메시지 텍스트 블록 주위에 StackPanel 사용 . 문제 : 팝업은 위치 지정 기능과 함께 제공됩니다. adorner의 텍스트 상자 아래에 화면 영역이 충분하지 않으면 자동으로 위치를 재배치합니다. 하지만 스택 패널을 사용하면 공간이 없거나 텍스트 상자 레이아웃이 바뀌면 오류 메시지가 잘립니다.

따라서 본질적으로 팝업을 위치 기능에 사용하고 싶습니다. 어떻게 든 가시성 문제를 해결하고 싶어

답변

0

여기서 문제는 커서가 TextBox 안에 있더라도 윈도우의 크기를 조정할 수 있다는 것입니다. 유용한 상태 정보를 얻을 수 없으므로 IsOpen을 당신은 여전히 ​​탈구 된 팝업을 얻습니다.

아마도 this related question이 게재 위치를 도와 드릴 수 있습니다.

관련 문제