0

我的(简化的)验证模板是

<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。问题:弹出窗口带有定位功能,即,如果文本框下方没有足够的屏幕区域供装饰器使用,它会自动重新定位它。但是如果使用堆栈面板,如果没有空间,错误消息就会被切断,或者它会改变文本框布局(不需要)

所以本质上,我想使用弹出窗口的位置功能,但不知何故想解决可见性问题

4

1 回答 1

0

这里的问题是,即使光标在 TextBox 内,您也可以调整窗口大小,您无法从中获取任何有用的状态信息,因此如果您IsOpen依赖它,您仍然会得到错位的弹出窗口。

可能这个相关的问题可以帮助你安置。

于 2011-09-02T08:34:57.863 回答