2010-01-25 3 views
0

첫 번째 질문은 여기에 있습니다. 어쨌든 여기에 간다 :SelectedDate를 기준으로 DatePicker 스타일을 변경하십시오

많은 DatePicker 컨트롤 (CodePlex의 WPFToolkit에서 DatePicker)이있는 XAML Windows가 있습니다. 모든 DatePicker의 기본 값은 1/1/1990이며 다른 날짜를 선택하지 않은 경우 상사 (:-))가 텍스트를 검은 색이 아닌 기울임 꼴로 표시하려고합니다. 따라서, 그것은 Date가 아직 입력되지 않은 필드를 쉽게 볼 수있게합니다.

이 작업은 쉽지만 WPF/XAML을 처음 사용하게되었습니다. 사실, 이것들은 그것을 사용하는 나의 첫 걸음입니다.

<Style TargetType="{x:Type my:DatePicker}"> 
     <Style.Triggers> 
      <Trigger Property="Text" Value="1/1/1990"> 
       <Setter Property="Foreground" Value="DarkGray"/> 
       <Setter Property="ToolTip" Value="Please select a date"/> 
       <Setter Property="FontStyle" Value="Italic"/> 
      </Trigger> 
     </Style.Triggers> 
    </Style> 

문제, 그것은 분명하기 때문에 현지화/지역 설정 문제의 모든 시스템에서 작동하지 않는 것입니다 : 그래서 여기

내가 무슨 큰 실제로 작동하는 것입니다. 트리거의 "값"속성에

<Style TargetType="{x:Type my:DatePicker}"> 
    <Style.Triggers> 
     <Trigger Property="Text" Value="{Binding Source={x:Static p:Settings.Default}, Path=MinDate, Mode=TwoWay}"> 
      <Setter Property="Foreground" Value="DarkGray"/> 
      <Setter Property="ToolTip" Value="Veuillez choisir une date"/> 
      <Setter Property="FontStyle" Value="Italic"/> 
     </Trigger> 
    </Style.Triggers> 
</Style> 

공지 사항의 차이 :

그래서 나는이 시도. 이것은 다음과 같은 오류를 얻을 :

A 'Binding' cannot be set on the 'Value' property of type 'Trigger'. A 'Binding' can only be set on a DependencyProperty of a DependencyObject.

어느 내가의 의미를 이해 할이 작동하지 않는 이유를 나는 이해합니다. MinDate는 DateTime 형식의 값인 1/1/1990입니다.

그래서 모든 컴퓨터에서 첫 번째 코드 조각의 결과를 얻을 수 있습니까?

시간 내 주셔서 감사합니다.

답변

2

좋아, 같은 문제로 실행하는 일이 그 사람들을 위해, 여기에 내가 마지막으로 무슨 짓을했는지 : XAML에서

: 코드 숨김에서

<src:ConvertMinDate x:Key="ConvertMinDate"/> 

<Style TargetType="{x:Type my:DatePicker}"> 
     <Style.Triggers> 
      <DataTrigger Binding="{Binding Path=SelectedDate, RelativeSource={RelativeSource Self}, 
       Converter={StaticResource ConvertMinDate}}" Value="True"> 
       <Setter Property="Foreground" Value="DarkGray"/> 
       <Setter Property="ToolTip" Value="Select a date"/> 
       <Setter Property="FontStyle" Value="Italic"/> 
      </DataTrigger> 
     </Style.Triggers> 
    </Style> 

:

public class ConvertMinDate : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 

     if (value == null) 
     { 
      return true; 
     } 
     else 
     { 
      DateTime date = Peche.Properties.Settings.Default.MinDate; 
      if (value is DateTime) 
      { 
       date = (DateTime)value; 
       return date == Peche.Properties.Settings.Default.MinDate; 
      } 
      else 
      { 
       return true; 
      } 
     } 

    } 

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     throw new NotImplementedException(); 
    } 
} 

MinDate이있다 내 프로젝트의 설정 섹션에서 1990 년 1 월 1 일로 설정됩니다.

이제는 SelectedDate가 null이거나 MinDate 인 경우 변환 된 값이 true를 반환하므로 DataTrigger가 트리거되고 DatePickerTextBox 인 경우 스타일이 변경됩니다.

WPF가 좋지 않습니까? :-)

0

트리거를 원하지 않습니다. 템플릿의 스타일을 변경할 수 있습니다. This 기사가 나를 도왔다.

또한 원하는 경우 오늘 날짜를 설정할 수 있습니다. Here은 Datepicker에 대한 문서에 대한 링크입니다.

+0

링크를 제공해 주셔서 감사합니다. 그러나 실제로 Calendar 컨트롤의 스타일을 변경하지는 않습니다. DatePickerTextBox에 표시된 텍스트 만. 나는 그 값에 따라 텍스트 상자의 스타일을 변경하기를 원하기 때문에 트리거를 사용합니다. 어제 그 점에 대해서는 분명하지 않았을 수도 있습니다. DatePickerTextBox의 Text 속성이 01/01/1990 인 경우 전경을 DarkGray Italic으로 변경하고, 그렇지 않으면 Normal Black으로 다시 변경하여 시각적 피드백을 통해 어떤 필드가 기본값을 갖는지 시각적으로 확인하십시오. 그게 방아쇠를 사용하는 것이 옳은 것일 수도 있다고 생각한 이유입니다. –

+0

좋아, 방아쇠를 원할지도 모르지만, 그 날짜를 사용하는 것이 최선이라고 생각하지 않습니다. 아마도 bool 속성에 바인딩하여 로컬 리 제이션에 대해 걱정할 필요가 없었을 것입니다. – nportelli

+0

고마워, 그게 내가 올바른 길을 찾는데 도움이되었다. SelectedDate 속성이 기본 Date 값과 같으면 스타일 변경을 트리거하는 true를 반환하는 변환기를 만들었습니다. 매력처럼 작동합니다. 다시 한번 감사드립니다. –

관련 문제