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
を使ってビジュアルエフェクトを追加することができます。 テンプレートが複雑になればなるほど、ロードに時間がかかります。