3

それで、私はこのコードを少し前に書いて、以前は問題なく動作していましたが、最近何らかの理由でまったく動作しなくなりました。これがxamlです...

<DatePicker SelectedDate="{Binding Criteria}" IsEnabled="{Binding IsEnabled}" Width="130" HorizontalAlignment="Right">
    <DatePicker.CommandBindings>
        <CommandBinding Command="controls:DateCommands.SelectToday" CanExecute="CommandBinding_CanExecute" Executed="CommandBinding_Executed"/>
    </DatePicker.CommandBindings>
    <DatePicker.CalendarStyle>
        <Style TargetType="{x:Type Calendar}">
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="{x:Type Calendar}">
                        <TabControl>
                            <TabItem Header="Calender">
                                <CalendarItem Background="{TemplateBinding Control.Background}" BorderBrush="{TemplateBinding Control.BorderBrush}" BorderThickness="{TemplateBinding Control.BorderThickness}" Style="{TemplateBinding Calendar.CalendarItemStyle}" />
                            </TabItem>
                            <TabItem Header="Relative Time">
                                <Grid>
                                    <Grid.ColumnDefinitions>
                                        <ColumnDefinition/>
                                        <ColumnDefinition/>
                                    </Grid.ColumnDefinitions>
                                    <Button Grid.Column="0" Command="controls:DateCommands.SelectToday" CommandParameter="Today" Content="Today" />
                                    <Button Grid.Column="1" Command="controls:DateCommands.SelectToday" CommandParameter="Yesterday" Content="Yesterday" />
                                </Grid>
                            </TabItem>
                        </TabControl>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>
    </DatePicker.CalendarStyle>
</DatePicker>

基本的に、日付ピッカーのカレンダーをオーバーライドし、ユーザーが実際の時間ではなく相対時間マクロを選択できるようにするタブ コントロールを配置します (生成されたクエリが常にその相対時間を使用するようにします)。これは以前は正常に機能していましたが、カレンダーから選択しようとすると何も起こらず、ボックスやバッキング プロパティに値が入力されません。

コードを取り出して新しいプロジェクトにダンプして実験しましたが、この単純なケースを機能させることさえできませんでした...

<DatePicker Width="130" HorizontalAlignment="Right">
    <DatePicker.CalendarStyle>
        <Style TargetType="{x:Type Calendar}">
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="{x:Type Calendar}">
                        <CalendarItem Background="{TemplateBinding Control.Background}" BorderBrush="{TemplateBinding Control.BorderBrush}" BorderThickness="{TemplateBinding Control.BorderThickness}" Style="{TemplateBinding Calendar.CalendarItemStyle}" />
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>
    </DatePicker.CalendarStyle>
</DatePicker>

このコードは同じことを行います。カレンダーから日付を選択しようとすると、何も起こりません。これは以前は機能していましたが、私の知る限り、何も変わっていません。何が起こっているのか、またはおそらく私がやろうとしていることのより良い実装について洞察を持っている人はいますか?

4

1 に答える 1

3

私はそれを考え出した。なんらかの理由で、この部分はすべてが機能するために重要です...

<CalendarItem x:Name="PART_CalendarItem"... />

理由はよくわかりませんが、何もしていないと思って削除したことを覚えていますが、その行がないと、選択した日付がテキスト ボックスまたはバッキング プロパティに入力されません。

于 2012-05-04T16:51:11.187 に答える