public class TestComboBox : ComboBox
{
public override void OnApplyTemplate()
{
base.OnApplyTemplate();
var popup = (Popup)Template.FindName("PART_Popup", this);
popup.Placement = PlacementMode.Custom;
popup.CustomPopupPlacementCallback += (Size popupSize, Size targetSize, Point offset) =>
new[] { new CustomPopupPlacement() { Point = new Point (targetSize.Width-popupSize.Width, targetSize.Height) } };
}
}
4条答案
按热度按时间vcudknz31#
当我打开Expression Blend时,我在几秒钟内就找到了解决方案:
有时这个应用程序比手工编写xaml更有用,但不是经常。
fkaflof62#
我将对PopUp使用“Custom”placementmode,并声明一个回调函数将弹出控件放置到正确的位置,如下所示:WPF ComboBox DropDown Placement
看看下面的示例是否适合您:
我希望这能帮上忙,问候
66bbxpm53#
有人可以张贴完整的xaml代码吗?
我尝试了以下方法:
...经过一些工作和测试,我找到了一个很好的解决方案...
huus2vyu4#
这是一个有点hacky,但工作。你只需要改变组合框的风格。
弹出窗口的水平偏移量只需要得到PopupContent. ActualWidth-PlacementTarget. ActualWidth的值。为了得到这个值,我使用了this trick from Charles Petzold。