我在我的DateTimePicker control中添加了一个装饰,但它并未显示在其他控件的顶部。为什么?我如何解决它?如何绘制WPF装饰物?
我的XAML目前是这样的:
<UserControl x:Class="IntelliMap.WPF.DateTimePicker"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:wpftc="clr-namespace:Microsoft.Windows.Controls;assembly=WPFToolkit"
mc:Ignorable="d">
...
<AdornerDecorator>
<Grid>
...
<TextBox x:Name="DateDisplay"
HorizontalAlignment="Stretch" ...>
</TextBox>
...
</Grid>
</AdornerDecorator>
</UserControl>
装饰器本身是从用户控件一个单独的类,并在构造函数中添加:
public DateTimePicker()
{
InitializeComponent();
...
AdornerLayer adornerLayer = AdornerLayer.GetAdornerLayer(DateDisplay);
if (adornerLayer != null)
{
adornerLayer.Add(_upDownBtns = new TextBoxUpDownAdorner(DateDisplay));
_upDownBtns.Click += (textBox, direction) => { OnUpDown(direction); };
}
}
'AdornerDecorator'存在,因为没有它,'GetAdornerLayer'返回null。 – Qwertie
啊,在控件的激活事件中,而不是构造函数中进行装饰器设置。在GetAdornerLayer可以获得Windows AdornerLayer之前,控件需要在屏幕上。 –
什么事件? UserControl上没有激活事件。我尝试过'Loaded',但是'GetAdornerLayer'在那个事件中仍然返回null。 – Qwertie