2011-02-04 21 views
3

ページに表示されるように、ツールキットのDatepickerで境界線の色を設定する際に問題があります。私はDatePickerPageについて話していません。背景色と前景色を設定できますが、境界線は保持されません。WP7日付ピッカーの境界線の色を設定する

<toolkit:DatePicker x:Name="dpDeliverBy" Header="Deliver By" Grid.Row="6" 
HeaderTemplate="{StaticResource MyHeaderTemplate}" Margin="-12, 0, 0, -10" Value="" 
BorderBrush="Black" Background="White" BorderThickness="2" Foreground="Black" /> 

境界線が保持されていないようで、使用する他のプロパティがわかりません。

答えて

6

DatePickerテンプレートを編集できないというのは興味深いことです。 source codeを見て、何らかの理由でテンプレートがメインコントロールテーマ - Generic.xamlで定義されており、それ自体で定義されたBorderBrushプロパティがないために発生することが分かりました。

パッケージをダウンロードする - 既存のスケルトンの上にカスタムコントロールを作成する必要があります。

テーマファイルを開き、DatePickerのテンプレートを見る場合は、BorderBrushBorderThicknessの値を編集できます。覚えておくべきこと - ソースを再コンパイルしたら、正しいライブラリを使用していることを確認する必要があります(メインプロジェクトで参照するとき)。既定では、Microsoft.Phone.Controls.Toolkitユニットを追加すると、GACに登録されているライブラリ(ツールキットをインストールしたと仮定します)を参照し、SDKフォルダにあるものを取得します。それが欲しい。ライブラリ名を変更するか、ローカルコピーを変更します。

このチュートリアルが必要な場合はI just wrote oneです。ここ

は(容易再利用のためのソースコードに変更された)変更されたスタイルである:

<Style TargetType="controls:DatePicker"> 
    <Setter Property="Background" Value="{StaticResource PhoneTextBoxBrush}"/> 
    <Setter Property="BorderThickness" Value="0"/> 
    <Setter Property="BorderBrush" Value="Azure"/> 
    <Setter Property="Foreground" Value="{StaticResource PhoneTextBoxForegroundBrush}"/> 
    <Setter Property="HorizontalContentAlignment" Value="Left"/> 
    <Setter Property="PickerPageUri" Value="/Microsoft.Phone.Controls.Toolkit;component/DateTimePickers/DatePickerPage.xaml"/> 
    <Setter Property="ValueStringFormat" Value="{}{0:d}"/> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="controls:DatePicker"> 
       <StackPanel> 
        <ContentControl 
         Content="{TemplateBinding Header}" 
         ContentTemplate="{TemplateBinding HeaderTemplate}" 
         Foreground="{StaticResource PhoneSubtleBrush}" 
         HorizontalContentAlignment="{TemplateBinding HorizontalContentAlignment}" 
         Margin="12,0,12,-4"/> 
        <Button 
         x:Name="DateTimeButton" 
         Content="{TemplateBinding ValueString}" 
         Background="{TemplateBinding Background}" 
         BorderThickness="{TemplateBinding BorderThickness}" 
         BorderBrush="{TemplateBinding BorderBrush}" 
         FontFamily="{TemplateBinding FontFamily}" 
         Foreground="{TemplateBinding Foreground}" 
         Height="72" 
         HorizontalContentAlignment="{TemplateBinding HorizontalContentAlignment}"/> 
       </StackPanel> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 
4

シルバーツールキットは、所望の効果を達成するために必要ではない再構築する必要はありません。このツールキットのアプローチは、XAMLの開始以来使用されてきたアプローチと同じです。つまり、「見た目のない」コントロールのアプローチです。コントロールのロジックはクラスファイルで定義され、外観はXAMLのThemes \ generic.xamlファイルに定義されています。

フレームワークでは、このファイルのXAMLを使用して、置換を指定しない限りコントロールをレンダリングします。これは一般的な処理です。そのため、App.xamlに新しいスタイルを追加するだけで、新しいものではなくカスタムスタイルが使用されるため、Toolkitアセンブリを再コンパイルする必要はありません。

もっと知りたい場合は、VSJにこの記事の記事があります。

+0

これは本当に依存しています。将来の再利用のために、プロパティを開いたままにして、テンプレートなしで設定できるようにする方が簡単です。 –

+1

Silverlight Toolkitチームにソースコードの変更を提案することに同意しますが、一般的には、コントロールを簡単に再テンプレートすることができれば、第3の部分ライブラリをカスタマイズすることは長期的にはより保守性があります:) –

+0

私はそれが問題だと思います個人的な意見 - すべての新しいプロジェクトでコントロールを再テンプレートしたくないですが、もう一度 - 実際に(互換性のあるテーマを使用して)コントロールをカスタマイズする必要がある頻度によって異なります。 –

関連する問題