我有一个silverlight 4应用程序,它有一些与页面一样宽的文本框。
当出现验证错误时,当用户点击控件时会显示一个弹出窗口。
问题是 - 它只显示文本框左侧这些长文本框的弹出窗口。它不会高于或低于此值,因此,大部分弹出窗口都显示在页面之外,因此它会被切断。
我知道我可以重新模板文本框并尝试自己调整弹出窗口,但在此之前我只是想检查是否有人知道一个简单的属性或我可以用来阻止它的东西发生?
干杯
杆。
答案 0 :(得分:0)
好问题。我想我会尝试通过一些有点智能的解决方案来解决这个问题。 AttachedProperty
。
伪代码:
<TextBox ... my:PopupUtils.KeepPopupWithinScreen="True"/>
和(伪c#)代码:
public static class PopupUtils
{
// remember: pseudo code, just to get the idea
static AttachedProperty KeepPopupWithinScreen = type: bool, default: false,
onChanged: HandleKeepPopupWithinScreenChanged;
private static void HandleKeepPopupWithinScreenChanged(
DependencyObject obj, bool value)
{
obj.Loaded += HandleTargetElementLoaded;
}
private staic void HandleTargetElementLoaded(object sender, ...)
{
var popup = VisualTreeHelper.GetDecendantOfType<Popup>(sender);
if ( popup != null )
{
var offsetController = new OffsetController();
offsetController.SetBinding(ObservedOffsetProperty,
new Binding("HorizontalOffset"){Source=popup});
offsetController.ControlledTarget = popup;
//now to prevent garbageCollection...
SetAttachedOffsetController(popup,offsetController);
}
}
public static AttachedProperty AttachedOffsetController = type:OffsetController;
}
我有时这样做,所以这种模式实际上非常好用。也许感觉有点不自然&#34;起初。
答案 1 :(得分:0)
告诉您我用于此问题的解决方案。
这是另一个StackOverflow问题,我丢失了引用,所以我为没有正确引用它而道歉,但问题是由文本框和其他控件样式引起的,当控件侧面有固定位置时显示验证消息。
我只需要创建样式的副本,并将弹出窗口显示在控件的顶部而不是旁边。
解决了问题。
干杯
杆。