Проблемы с использованием Controls.Popup в качестве средства исправления ошибок в WPF - PullRequest
0 голосов
/ 01 сентября 2011

Мой (упрощенный) шаблон проверки:

<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. Установите для параметра StaysOpen значение true для ErrorPopup.Проблема: когда вы изменяете размер / перемещаете родительское окно, когда ошибка видна, ErrorPopup остается в том же месте, он не перемещается вместе с текстовым полем
  2. Использование StackPanel вокруг текстового поля (украшенный элемент) и ошибкитекстовый блок сообщения.Проблема: всплывающее окно поставляется с возможностями позиционирования, т. Е. Если под текстовым полем для рекламодателя не хватает области экрана, оно автоматически перемещает его.Но если используется панель стека, сообщение об ошибке просто обрезается, если места нет, или оно меняет макет текстового поля (не желательно)

Итак, по сути, я хочу использовать всплывающее окно для его позиционноговозможности, но как-то хотят исправить проблему видимости

1 Ответ

0 голосов
/ 02 сентября 2011

Проблема здесь в том, что вы можете изменить размер окна, даже если курсор находится внутри TextBox, из этого вы не сможете получить какую-либо полезную информацию о состоянии, поэтому, если вы установите IsOpen в зависимости от того, что вы по-прежнему будете получать всплывающие окна.

Возможно этот связанный вопрос может помочь вам с размещением.

...