0

我正在开发一个 Windows Phone 应用程序。在那我想要一个功能,如果一个文本框获得焦点日期选择器应该被打开。同样,另一个文本框将触发时间选择器。

我搜索并发现这可以通过编写自定义日期/时间选择器来实现。我成功地让时间选择器以这种方式工作,但是当我尝试为日期选择器实现相同的方法时,我得到了以下异常。

"Error HRESULT E_FAIL has been returned from a call to a COM component."

时间和日期选择器的 XAML 代码如下。

<popUps:CustomTimePicker x:Name="timePicker" Visibility="Collapsed" Value="{Binding SelectedTime, Converter={StaticResource dateTimeConverter}, Mode=TwoWay}" />
<popUps:CustomDatePicker x:Name="datePicker" Visibility="Collapsed" />

我为此编写的自定义日期选择器类是

class CustomDatePicker : DatePicker
{
    public void ClickDateTemplateButton()
    {
        ApplyTemplate();

        Button button = (GetTemplateChild("DateTimeButton") as Button);
        if (button != null)
        {

            ButtonAutomationPeer peer = new ButtonAutomationPeer(button);
            if (peer != null)
            {
                IInvokeProvider provider = (peer.GetPattern(PatternInterface.Invoke) as IInvokeProvider);
                if (provider != null)
                {
                    provider.Invoke();
                }
            }

        }
    }
}

请帮我找出哪里出错了。谢谢。

4

1 回答 1

1

作为一种解决方法,不要在您的 listBoxItem DataTemplate 中添加 customDatePicker。每当您要启动控件时,请调用以下方法。您需要将所选 listBoxItem 的索引保存在页面的瞬态状态中,以便在日期选择器页面关闭后返回页面后使用所选值填充列表框的正确项目。

private void LanchDatePicker()
{
    datepicker = new CustomDatePicker
    {
        IsTabStop = false, 
        MaxHeight = 0,
        Value = null
    };

   datepicker.ValueChanged += DatePicker_OnValueChanged;
   LayoutRoot.Children.Add(datepicker);
   datepicker.ClickTemplateButton();
}
于 2014-04-10T08:50:52.117 回答