2011-02-04 4 views
3

У меня возникли проблемы с настройкой цвета рамки в Toolkit Datepicker, как он отображается на странице. Я не говорю о DatePickerPage. Я могу установить цвет фона и переднего плана, но граница не удерживается.WP7 Установить цвет границы Datepicker

<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, вы можете редактировать значения для BorderBrush и BorderThickness. Одна вещь, которую нужно помнить - как только вы перекомпилируете источник, вам нужно убедиться, что вы используете правильную библиотеку (при ссылке в основном проекте). По умолчанию при добавлении блока 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 Toolkit не является необходимым для достижения желаемого эффекта. Подход, сделанный Инструментами, тот же, который использовался с момента создания XAML: «без проблем». Логика управления определяется в файле класса, а визуальный внешний вид определен в XAML в файле Themes \ generic.xaml.

Структура использует XAML в этом файле, выдает элемент управления, если вы не указали замену, что является общей задачей. Итак, все, что вам нужно сделать, это добавить новый стиль в App.xaml, а затем вам не нужно перекомпилировать сборку Toolkit, потому что среда будет использовать ваш собственный стиль вместо нового.

Существует хорошая статья о VSJ, которая объясняет эту модель, если вы хотите узнать больше.

+0

Это действительно зависит - для будущего повторного использования легче сохранить свойство открытым и уметь устанавливать его без шаблона. –

+1

Я согласен с тем, что для команды Silverlight Toolkit должно быть предложено изменение исходного кода, но в целом настройка библиотек третьей части, когда вы можете легко переконфигурировать элемент управления, более удобна в обслуживании в конечном итоге :) –

+0

Я думаю, это вопрос личное мнение. Я бы не захотел переформатировать элемент управления в каждом новом проекте, но опять же - это зависит от того, как часто вам нужно настроить готовый к работе (с использованием совместимой темы) контроль. –

Смежные вопросы