2017-01-16 19 views
0

に日付ピッカーを取り付け、私はカレンダーアイコンを取り除き、代わりに日付ピッカー「を付ける」を取得したいと思います別のUIエレメント

enter image description here

のように見えます

<StackPanel Orientation="Horizontal"> 
    <Label Content="{Binding WidgetSubTitle}" Style="{StaticResource WidgetSubTitleStyle}" /> 

    <DatePicker SelectedDate="{Binding SelectedDate}"> 
     <DatePicker.Resources> 
      <Style TargetType="DatePickerTextBox"> 
       <Setter Property="Visibility" Value="Collapsed" /> 
       <Setter Property="IsReadOnly" Value="True" /> 
      </Style> 
     </DatePicker.Resources> 
    </DatePicker> 
</StackPanel> 

を持っています私のLabel。ラベルをクリックすると、ピッカー(ビューモデルのDateTimeプロパティへの双方向バインディングがあります)を開きます。私はLabelをボタンで置き換えることもできるので、私はそのコマンドから恩恵を受けることができます、それは問題ではありません。

私はそれを行う方法を理解できません。私はをPopupに入れた解決策を見てきましたが、これは私にはものを複雑にしているようです。

DatePickerコントロール(Visibility = Collapsed)全体を非表示にし、ボタン/ラベルをクリックすると、そのピッカーのカレンダーポップアップ部分の表示のみをオンに切り替えます。しかし、実際にスタイルを理解することはできません...

答えて

1

あなたは完全にそののControlTemplateを変更することにより、WPFコントロールの外観を変更することができます。この場合、基本的にはButtonのように見えるDatePickerコントロールのカスタムテンプレートを定義してから、Buttonの別のテンプレートを定義してLabelのように見えるようにすることができます。

<DatePicker> 
    <DatePicker.Template> 
     <ControlTemplate TargetType="DatePicker"> 
      <Grid x:Name="PART_Root" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" 
          VerticalAlignment="{TemplateBinding VerticalContentAlignment}"> 
       <Button x:Name="PART_Button"> 
        <Button.Template> 
         <ControlTemplate TargetType="Button"> 
          <Label Content="{Binding WidgetSubTitle}" Style="{StaticResource WidgetSubTitleStyle}" /> 
         </ControlTemplate> 
        </Button.Template> 
       </Button> 
       <Popup x:Name="PART_Popup" AllowsTransparency="True" Placement="Bottom" PlacementTarget="{Binding ElementName=PART_TextBox}" StaysOpen="False"/> 
      </Grid> 
     </ControlTemplate> 
    </DatePicker.Template> 
</DatePicker> 

これは、外観を変更してもコントロールの機能が変わらないという点で素晴らしいことです。

1

yor DatePickerコントロールのカスタムスタイルを記述する必要があります。それはあなたに言及した解決策と同様、あなたのために複雑なもののように見えるかもしれませんが、そうではありません。それはWPFをそれほど素晴らしいものにしてくれるものの一つです。

WPF ControlTemplatesには通常、部品があるため、Controllの実装ではどのUI要素を使用するかが分かります。

DatePickerには、必要に応じてカスタマイズする必要があるPART_ButtonPART_TextBoxがあります。私。実際のボタンを削除し、ラベルを追加します。

msdnの素晴らしい例など、必要なものをすべて読むことができます。

https://msdn.microsoft.com/en-us/library/ff468215(v=vs.110).aspx

関連する問題