如何动态更改日期选择器(WPF、C#)的字符串格式?

问题描述 投票:0回答:1

我有这个日期选择器元素:

                    <DatePicker
                    Name="DataSelected"
                    Grid.Column="1" Grid.Row="2"
                    SelectedDate="{Binding DataSelected, Mode=TwoWay}"
                    CalendarOpened="DatePicker_Opened">
                    <DatePicker.Resources>
                        <Style TargetType="DatePickerTextBox">
                            <Setter Property="Control.Template">
                                <Setter.Value>
                                    <ControlTemplate>
                                        <TextBox x:Name="PART_TextBox"
                                             Text="{Binding Path=SelectedDate, 
                                                    RelativeSource={RelativeSource AncestorType={x:Type DatePicker}}, 
                                                    StringFormat={x:Static local:MyView.DateFormat}}" />
                                    </ControlTemplate>
                                </Setter.Value>
                            </Setter>
                        </Style>
                    </DatePicker.Resources>
                </DatePicker>

现在基于 DateFormat 变量的值(可以是“yyyy”或“MM-yyyy”或“dd-MM-yyyy”)我想更改日期选择器的格式。因为我希望用户能够在 DateFormat 为“yyyy”时仅选择/查看年份,或者在变量为“MM-yyyy”时仅选择/查看年份和月份,依此类推。我怎样才能做到这一点? (我的代码是C#) (对于任何语法错误,我很抱歉,英语不是我的母语)

c# wpf data-binding datepicker wpftoolkit
1个回答
0
投票

正如此处评论中所讨论的,我用来“动态”更改文本框的 StringFormat 的代码。其中 DecimalPlaces 是我用来触发更改的整数

<TextBox>
    <TextBox.Style>
        <Style TargetType="TextBox" BasedOn="{StaticResource TextBoxTemplate}">
            <Setter Property="Text" Value="{Binding CurrentPosition, StringFormat=F3}"></Setter>
            <Style.Triggers>
                <DataTrigger Binding="{Binding DecimalPlaces}" Value="0">
                    <Setter Property="Text" Value="{Binding CurrentPosition , StringFormat=F0}"></Setter>
                </DataTrigger>
                <DataTrigger Binding="{Binding DecimalPlaces}" Value="1">
                    <Setter Property="Text" Value="{Binding CurrentPosition,  StringFormat=F1}"></Setter>
                </DataTrigger>
                <DataTrigger Binding="{Binding DecimalPlaces}" Value="2">
                    <Setter Property="Text" Value="{Binding CurrentPosition,  StringFormat=F2}"></Setter>
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </TextBox.Style>
</TextBox>
© www.soinside.com 2019 - 2024. All rights reserved.