WP7 Установить цвет рамки Datepicker - PullRequest
3 голосов
/ 04 февраля 2011

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

<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" />

Кажется, граница не закрепилась, и я не знаю, какое еще свойство использовать.

Ответы [ 2 ]

6 голосов
/ 04 февраля 2011

Интересно, что вы не можете редактировать шаблон DatePicker. Посмотрев исходный код , я обнаружил, что по какой-то причине это происходит из-за того, что шаблон определен в главной теме элемента управления - Generic.xaml, а само свойство BorderBrush не определено само по себе.

Загрузите пакет - он понадобится вам для создания пользовательского элемента управления поверх существующего скелета.

Вам следует открыть этот файл темы, и если вы посмотрите на шаблон для DatePicker, вы можете отредактировать значения для BorderBrush и BorderThickness. Следует помнить одну вещь: после перекомпиляции исходного кода вам необходимо убедиться, что вы используете правильную библиотеку (при ссылках в основном проекте). По умолчанию, когда вы добавляете модуль Microsoft.Phone.Controls.Toolkit , он будет ссылаться на библиотеку, зарегистрированную в GAC (при условии, что вы установили инструментарий), и возьмет ту, которая находится в папке SDK - ты не хочешь этого. Измените имя библиотеки или локальную копию.

Если вам нужен учебник для этого, Я только что написал один .

Вот измененный стиль (измененный в исходном коде для более легкого повторного использования):

<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 голосов
/ 04 февраля 2011

Нет необходимости перестраивать набор инструментов Silverlight, нет необходимости для достижения желаемого эффекта.Подход, использованный в Toolkit, тот же, который использовался с момента создания XAML: элемент управления «без вида».Логика элемента управления определена в файле класса, а внешний вид определен в XAML в файле Themes \ generic.xaml.

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

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

...