2011-02-04 54 views
3

我在設置工具包日期選擇器中的邊框顏色時出現問題,因爲它出現在頁面上。我不是在談論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

這是沒有必要重建Silverlight工具包是沒有必要的,以實現期望的效果。工具包採用的方法與自XAML成立以來一直使用的方法相同:即「無視」控制。該控件的邏輯是在類文件中定義的,並且可視化外觀是在Themes \ generic.xaml文件中的XAML中定義的。

框架使用此文件中的XAML呈現控件,除非您指定替換,這是常見的事情。因此,您只需在App.xaml中添加新樣式,然後不需要重新編譯Toolkit程序集,因爲該框架將使用您的自定義樣式而不是新樣式。

關於VSJ有一篇很好的文章解釋了這個模型,如果你想知道更多。

+0

這確實取決於 - 爲了將來重複使用,保持屬性打開並且能夠在沒有模板的情況下進行設置會更容易。 – 2011-02-04 16:03:25