2014-04-10 3 views
0

Windows 전화 응용 프로그램을 개발 중입니다. 텍스트 상자에 포커스가있는 경우 날짜 선택 도구를 열어야한다는 기능이 필요했습니다. 마찬가지로 다른 텍스트 상자가 시간 선택기를 트리거합니다.사용자 지정 날짜 선택기가 예외 창을 던졌습니다.

내가 검색 한 결과 사용자 지정 날짜/시간 선택기를 작성하면이 작업을 수행 할 수 있음을 알 수있었습니다. 이 방식으로 시간 피커를 성공적으로 가져 왔지만 날짜 선택기에서 같은 메서드를 구현하려고하면 다음과 같은 예외가 발생합니다.

"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(); 
       } 
      } 

     } 
    } 
} 

가 잘못 어디로 갔는지 나를 찾는 도와주세요입니다. 감사.

+0

왜 파생 클래스를 사용하고 텍스트 상자가 포커스를 취득한 후 명시 적으로 파생 된 날짜 선택기를 시작 할 때 DatePicker에서의 기본 동작 그게 당신이 바로 그것을 사용할 수 있을까? – Pantelis

+0

CustomDatePicker에서 Visibility 특성을 제거하면 어떻게됩니까? – Pantelis

+0

사실 내 필요성은 datepicker를 표시 할 때 초기에 "Date"(문자열 값)을 표시하는 것입니다. 그런 다음 사용자가 날짜를 선택하면 날짜가 표시되어야합니다. 내가 맞으면 기본 datepicker로는 불가능합니다. 그래서 내가이 일을 시도했다. – Presse

답변

1

해결 방법으로, listBoxItem DataTemplate에 customDatePicker를 추가하지 마십시오. 컨트롤을 시작할 때마다 다음 방법을 호출하십시오. datePicker 페이지가 닫힐 때 페이지로 돌아온 후 목록 상자의 올바른 항목을 선택한 값으로 채우려면 선택한 listBoxItem의 인덱스를 페이지의 일시적인 상태로 저장해야합니다.

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

    datepicker.ValueChanged += DatePicker_OnValueChanged; 
    LayoutRoot.Children.Add(datepicker); 
    datepicker.ClickTemplateButton(); 
} 
+0

datePicker가 열립니다. 가치와 모든 것을 묶는 것과 같은 다른 어려움을 조사해야 할 것입니다. 고마워. – Presse

+1

바인딩에 사용하는 사용자 정의 클래스의 인스턴스 인 선택된 ListBoxItem의'DataContext'를 저장하십시오. 'DatePicker'에서 값을 선택한 후 페이지로 돌아 왔을 때, 바인딩 소스의 해당 항목을 선택한 값으로 채 웁니다. – Pantelis