c# - 年月 - wpf タイマー




1つのウィンドウに25個のWPFカレンダーがあり、ウィンドウを開くのに5秒かかります (2)

これにより、Snoopを使用しているカレンダーボタンの違いを知ることができます。 はい、多くのカレンダーがレンダリングにもっと時間を要すると考えています。 それらの多くを使用する必要がある場合、私はあなた自身のものを作成しようとします。よりシンプルかつ/またはそれらを仮想化します

Heresボタン、3人の子供...

そして、カレンダー、522人の子供をheres。 私がまだ拡大しなかったCalendarButtonsそれぞれには、それぞれ9人の子供がいます。

私はWPFの新機能で、どれくらい遅いかというアイデアを得ようとしています。 Visual Studio 2010(.NET 4)で新しいWPFアプリケーションを開始し、このXAMLを作成しました。

<Window x:Class="CalendarTest1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="800" Width="1000">
    <WrapPanel>
        <Calendar />
        <Calendar />
        <Calendar />
...repeats for a total of 25 calendar objects...
    </WrapPanel>
</Window>

IDEでアプリケーションを実行するかどうかは、ウィンドウを開くのに5秒かかります。 開いたら、すぐに再描画され(すべてのサイズを変更すると)、すべてがうまくいくように見えます。

私のPCは最速ではありません:AMD Dual Core 2.3GHz、2GB RAM、XP 32ビットOS、オンボードビデオ。

私は、カレンダーの代わりに25個のボタンを置くことができ、1秒未満で読み込むことができます。

私は、次のように、MS Outlookのカレンダーの日表示で小さな月カレンダーのようなものを作成しようとしています。

だから、私はWrapPanelを使用して、サイズ変更時にカレンダーコントロールを追加/削除できると思っていました。 私は25を必要としないかもしれませんが、9または12でさえ、私が思うよりも遅いです(私は1秒未満で18カレンダーを表示する従来のWin32アプリを持っています)。

私の質問は次のとおりです:

カレンダーコントロールは、特定のデザインのために遅くなっていますか(悪いデザインか、この使用法のためだけに設計されていないか、データ/コントロール/情報をたくさん表示しようとしているため遅いですか?

私が自分のコントロールを作成するのに苦労するなら、良いデザイン(一般的なアイデアを歓迎します)を使用すると仮定すると、WPFのほうがずっと速くなるのでしょうか?

この使い方で、デフォルトのカレンダーコントロールをもっと速くするためにできることはありますか?


それ自体は答えではありませんが、これをWindow.Resources追加すると、マシンの負荷時間が50%減少しました(現在は25カレンダーで1秒未満です)

    <Window.Resources>
        <Style TargetType="CalendarDayButton">
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="CalendarDayButton">
                        <ContentPresenter ContentSource="Content" Margin="2"/>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>

        <Style TargetType="Calendar">
            <Setter Property="CalendarDayButtonStyle" Value="{StaticResource {x:Type CalendarDayButton}}"/>
        </Style>
    </Window.Resources>

編集:

この視覚的な変更は、コントロールの機能には影響しません。 CalendarのすべてのDayアイテムはSelectableであり、 Calendar.SelectedDateプロパティをバインドできます。

アイテムが選択されていることを視覚的に示すだけなので、その日をクリックすると何もしないようです。

ControlTemplateにこれを追加するだけです:

                <ControlTemplate TargetType="CalendarDayButton">
                    <ContentPresenter ContentSource="Content" Margin="2"/>

                    <ControlTemplate.Triggers>
                        <!-- Set The FontWeight to "Bold" when Selected -->
                        <Trigger Property="IsSelected" Value="True">
                            <Setter Property="FontWeight" Value="Bold"/>
                        </Trigger>
                    </ControlTemplate.Triggers>
                </ControlTemplate>

このControlTemplateとそのTriggersを使ってビジュアルエフェクトを追加することができます。 テンプレートが複雑になればなるほど、ロードに時間がかかります。







calendar