我在我的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