【问题标题】:Add clear button to WPF DatePicker from style从样式向 WPF DatePicker 添加清除按钮
【发布时间】:2020-05-11 09:31:50
【问题描述】:

我可以在 DatePicker 上为日历控件添加清除按钮,但我想知道是否可以在 DatePicker 文本框上添加相同的按钮?

我有什么:

我想得到什么:

<DatePicker >
                <DatePicker.CalendarStyle>
                    <Style TargetType="Calendar">
                        <Setter Property="Template">
                            <Setter.Value>
                                <ControlTemplate TargetType="{x:Type Calendar}">
                                    <Border BorderBrush="Black" BorderThickness="1">
                                        <StackPanel x:Name="PART_Root" HorizontalAlignment="Center" Background="LightBlue">
                                            <CalendarItem x:Name="PART_CalendarItem" 
                                                      BorderBrush="{TemplateBinding BorderBrush}" 
                                                      BorderThickness="{TemplateBinding BorderThickness}" 
                                                      Background="{TemplateBinding Background}" 
                                                      Style="{TemplateBinding CalendarItemStyle}" 
                                                      Height="Auto" Width="Auto"/>
                                            <Button Content="Clear Date"  Click="Button_Click"
                                                x:Name="PART_ClearButton"
                                                HorizontalAlignment="Center"
                                                VerticalAlignment="Center"
                                                Margin="2"/>
                                        </StackPanel>
                                    </Border>
                                </ControlTemplate>
                            </Setter.Value>
                        </Setter>
                    </Style>
                </DatePicker.CalendarStyle>
            </DatePicker>

【问题讨论】:

    标签: .net wpf xaml controltemplate


    【解决方案1】:

    看看DatePicker Styles and Templates

    修改 PART_Root:

    看代码中的cmets,有修改的部分注明!

     <Grid x:Name="PART_Root" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}">
                                <Grid.ColumnDefinitions>
                                    <ColumnDefinition Width="*" />
                                    <ColumnDefinition Width="Auto" />
                                    <!--ADD ANOTHER COLUMN HERE-->
                                    <ColumnDefinition Width="Auto" />
                                </Grid.ColumnDefinitions>
    
                                <!--CHANGE COLUMN=1 TO COLUMN =2-->
                                <Button x:Name="PART_Button"
                                        Grid.Column="2"
                    Foreground="{TemplateBinding Foreground}"
                    Focusable="False"
                    HorizontalAlignment="Left"
                    Margin="3,0,3,0"
                    Grid.Row="0"
                    Style="{StaticResource DropDownButtonStyle}"
                    VerticalAlignment="Top" />
    
                                <!--//ADD THE BUTTON HERE-->
                                <Button Grid.Column="1" Content="X" Foreground="Red" Width="20" Height="20"/>
    
                                <DatePickerTextBox x:Name="PART_TextBox"
                               Grid.Column="0"
                               Foreground="{TemplateBinding Foreground}"
                               Focusable="{TemplateBinding Focusable}"
                               HorizontalContentAlignment="Stretch"
                               Grid.Row="0"
                               VerticalContentAlignment="Stretch" />
                                <Grid x:Name="PART_DisabledVisual"
                  Grid.ColumnSpan="2"
                  Grid.Column="0"
                  IsHitTestVisible="False"
                  Opacity="0"
                  Grid.Row="0">
                                    <Grid.ColumnDefinitions>
                                        <ColumnDefinition Width="*" />
                                        <ColumnDefinition Width="Auto" />
                                    </Grid.ColumnDefinitions>
                                    <Rectangle Grid.Column="0"
                         Fill="#A5FFFFFF"
                         RadiusY="1"
                         Grid.Row="0"
                         RadiusX="1" />
                                    <Rectangle Grid.Column="1"
                         Fill="#A5FFFFFF"
                         Height="18"
                         Margin="3,0,3,0"
                         RadiusY="1"
                         Grid.Row="0"
                         RadiusX="1"
                         Width="19" />
                                    <Popup x:Name="PART_Popup"
                     AllowsTransparency="True"
                     Placement="Bottom"
                     PlacementTarget="{Binding ElementName=PART_TextBox}"
                     StaysOpen="False" />
                                </Grid>
                            </Grid>
    

    结果将是:

    【讨论】:

    • 当我应用这种风格的日历按钮图像消失了。
    • 您是否从 MSDN 页面复制了所有内容?日历按钮是 DropDownButtonStyle 的一部分。
    • 或者,您可以创建模板的副本,而不是从页面复制它。请参阅stackoverflow.com/a/61341064/2289942 了解如何创建副本
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多