我的(简化的)验证模板是
<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 仍然可见。期望的行为是两者都应该保持可见。
尝试的事情:
- 在 ErrorPopup 上将 StaysOpen 设置为 true。问题:当您在错误可见时调整/移动父窗口的大小时,ErrorPopup 保持在同一位置,它不会与文本框一起移动
- 在文本框(装饰元素)和错误消息文本块周围使用 StackPanel。问题:弹出窗口带有定位功能,即,如果文本框下方没有足够的屏幕区域供装饰器使用,它会自动重新定位它。但是如果使用堆栈面板,如果没有空间,错误消息就会被切断,或者它会改变文本框布局(不需要)
所以本质上,我想使用弹出窗口的位置功能,但不知何故想解决可见性问题