更改 windows DatePicker 的按下状态样式

Posted

技术标签:

【中文标题】更改 windows DatePicker 的按下状态样式【英文标题】:Change windows DatePicker's pressed state style 【发布时间】:2016-02-07 08:16:20 【问题描述】:

我正在为 Windows Phone 8.1 开发一个应用程序。我正在尝试编辑 Windows 默认 DatePicker 样式。我已经成功地使用这种样式添加了一个图像来代替DatePicker

<Style x:Key="DatePickerStyle" TargetType="DatePicker">
        <Setter Property="FontFamily" Value="ThemeResource PhoneFontFamilyNormal"/>
        <Setter Property="FontSize" Value="ThemeResource ContentControlFontSize"/>
        <Setter Property="Foreground" Value="ThemeResource DatePickerForegroundThemeBrush"/>
        <Setter Property="HorizontalAlignment" Value="Stretch"/>
        <Setter Property="HorizontalContentAlignment" Value="Left"/>
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="DatePicker">
                    <StackPanel x:Name="LayoutRoot" Margin="TemplateBinding Padding">
                        <ContentPresenter x:Name="HeaderContentPresenter" ContentTemplate="TemplateBinding HeaderTemplate" Content="TemplateBinding Header" Margin="0,0,0,-3" Style="StaticResource HeaderContentPresenterStyle" Foreground="White" HorizontalAlignment="Center" VerticalAlignment="Bottom"/>
                        <Button x:Name="FlyoutButton" BorderThickness="2.5" HorizontalAlignment="Stretch" HorizontalContentAlignment="TemplateBinding HorizontalContentAlignment" IsEnabled="TemplateBinding IsEnabled" Padding="6.5,0,0,3" BorderBrush="x:Null" Foreground="x:Null" Height="100" Width="100" Content=" ">
                            <Button.Background>
                                <ImageBrush Stretch="Uniform" ImageSource="/Assets/calendaricon.png"/>
                            </Button.Background>
                        </Button>
                    </StackPanel>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>

但是当按下DatePicker 时,它仍然显示旧的DatePicker 样式而不是我设置的新样式。我试图弄清楚如何设置日期选择器的按下状态样式,但我无法弄清楚。我希望所有状态的日期选择器都使用相同的正常状态样式。我怎样才能做到这一点?

【问题讨论】:

【参考方案1】:

设置按钮的内容模板(FlyoutButton)而不是设置按钮的背景(FlyoutButton)。

代码如下:

<Style x:Key="DatePickerStyle" TargetType="DatePicker">
    <Setter Property="FontFamily" Value="ThemeResource PhoneFontFamilyNormal"/>
    <Setter Property="FontSize" Value="ThemeResource ContentControlFontSize"/>
    <Setter Property="Foreground" Value="ThemeResource DatePickerForegroundThemeBrush"/>
    <Setter Property="HorizontalAlignment" Value="Stretch"/>
    <Setter Property="HorizontalContentAlignment" Value="Left"/>
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="DatePicker">
                <StackPanel x:Name="LayoutRoot" Margin="TemplateBinding Padding">
                    <ContentPresenter x:Name="HeaderContentPresenter" ContentTemplate="TemplateBinding HeaderTemplate" Content="TemplateBinding Header" Margin="0,0,0,-3" Style="StaticResource HeaderContentPresenterStyle" Foreground="White" HorizontalAlignment="Center" VerticalAlignment="Bottom"/>
                    <Button x:Name="FlyoutButton" 
                            BorderThickness="2.5"
                            HorizontalAlignment="Stretch"
                            HorizontalContentAlignment="TemplateBinding HorizontalContentAlignment"
                            IsEnabled="TemplateBinding IsEnabled"
                            Padding="6.5,0,0,3"
                            BorderBrush="x:Null"
                            Foreground="x:Null"
                            Height="100"
                            Width="100"
                            >
                        <Button.ContentTemplate>
                            <DataTemplate>
                               <Grid >
                                   <Image Stretch="Uniform"
                                          Source="/Assets/calendaricon.png"/>
                               </Grid>
                            </DataTemplate>
                        </Button.ContentTemplate>
                    </Button>
                </StackPanel>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

【讨论】:

以上是关于更改 windows DatePicker 的按下状态样式的主要内容,如果未能解决你的问题,请参考以下文章

与 Xcode 一样,Android 中的按下按钮背景更改

如何在角度6的按下按钮更改事件?

如何拦截 Windows 中物理电源按钮的按下?

按钮停止上的按下(波纹)动画

SpriteKit中的按下按钮

Android中的按下状态传播