かに太郎、ただいま開発中

Windowsアプリ作ってます。

C++とMFCから、C#とXAMLにのんびり移行中。

忘れっぽいので、健忘録。


テーマ:
以前、2次元配列を返すプロパティがあると、シリアライズできないと書いた。
ArrayList[] を返すプロパティもダメだった。

public ArrayList[] Aaa
{
get { return aaa; }
set { aaa= value; }
}

しかし、そのときのエラーメッセージが意味不明。

System.InvalidOperationException はハンドルされませんでした。
Message="一時クラスを生成できません (result=1)。\r\nerror CS1026: ) が必要です。\r\nerror CS1002: ; が必要です。\r\nerror CS1525: ')' は無効です。\r\nerror CS1002: ; が必要です。\r\nerror CS1525: ')' は無効です。\r\nerror CS1002: ; が必要です。\r\nerror CS1026: ) が必要です。\r\nerror CS1002: ; が必要です。\r\nerror CS1525: ')' は無効です。\r\nerror CS1002: ; が必要です。\r\nerror CS1525: ')' は無効です。\r\nerror CS1002: ; が必要です。\r\nerror CS1026: ) が必要です。\r\nerror CS1002: ; が必要です。\r\nerror CS1525: ')' は無効です。\r\nerror CS1002: ; が必要です。\r\nerror CS1525: ')' は無効です。\r\nerror CS1002: ; が必要です。\r\nerror CS1026: ) が必要です。\r\nerror CS1002: ; が必要です。\r\nerror CS1525: ')' は無効です。\r\nerror CS1002: ; が必要です。\r\nerror CS1525: ')' は無効です。\r\nerror CS1002: ; が必要です。\r\n"

なんだこのコンパイルエラーみたいなやつは...


同じテーマの記事
PR

テーマ:

Binding.StringFormatに指定できる。


広さを表す数字のところに、

<TextBlock Text="{Binding Path=Jou,StringFormat=[0畳]}" />

って書いたら、「4.5」が「5畳」になったよ。四捨五入するらしい。


<TextBlock Text="{Binding Path=Jou,StringFormat=[0.0畳]}" />

と書くと、「4.5」は「4.5畳」になったが、

「2」が「2.0畳」になった。そんな言い方はしないので、ダメだー


<TextBlock Text="{Binding Path=Jou,StringFormat=[{0:G}畳]}" />

なら、「2」は「2畳」、「4.5」は「4.5畳」



MSDNライブラリの該当ページは、ここ

ms-help://MS.MSDNQTR.v90.ja/dv_fxfund/html/580e57eb-ac47-4ffd-bccd-3a1637c2f467.htm

http://msdn.microsoft.com/ja-jp/library/dwhawy9k.aspx

Binding クラス → Binding.StringFormat → 型の書式設定 .... とたどっていくと、かなり遠かった。

残念ながら、xamlのサンプルはない。

テーマ:
以前、プチプチみたいなコントロールを作った。
プチプチが約700個のってる画面を出すのが遅いので、測ってみた。

3.1551188秒。

比較のため、Button も同じ数だけ作ってみた。
0.03122392秒。
なんで、100倍も差がつくんじゃーーー

余分なものを消してみよう。
<Canvas.RenderTransform>
  <TransformGroup>
    <ScaleTransform ScaleX="1" ScaleY="1"/>
    <SkewTransform AngleX="0" AngleY="0"/>
    <RotateTransform Angle="0"/>
    <TranslateTransform X="0" Y="0"/>
  </TransformGroup>
</Canvas.RenderTransform>

これってデフォルトやん、消したれ!
3.031636秒

いらない EventTrigger 発見! 消してみる。
1.9993088秒。おおっ

いらない Storybord を2個発見。消した。
1.4683082秒。ほぉーっ

さらに、デフォルト値なままのプロパティを消しまくる。
1.3120128秒。

んー、
まだ、Storybordが1つあるけど、これは消せないので、
これで限界か。

テーマ:
Page遷移するときに、どうも遅いなぁ.. と思ったので、調べてみた。
ComboBox の SelectionChanged や TextBox のTextChanged イベントが、
Page のコンストラクタとLoadedイベントの間に呼ばれている。
<TextBox 
TextChanged="OnAnswer"
Text="{Binding Path=Shop2, Mode=Default,
UpdateSourceTrigger=PropertyChanged}" />

Bindingしているので、データをセットされるときに、TextChanged も発生しているらしい。
当然ながら、全部の TextBox を各値にBinding しているので、TextBox の数だけ、TextChanged が発生。
TextChangedが発生したら、入力された内容に合わせて、いろいろ計算しているので、遅い!

コンストラクタとLoadedの間だけ、フラグを立てて、
フラグが立ってる間は、計算しないようにした。

public class PageQuestionFamily : PageFunction
bool IsLoading;
public PageQuestion(WizardData wizardData)
{
IsLoading = true;
this.InitializeComponent();
   this.DataContext = wizardData;
}

private void OnAnswer(object sender, RoutedEventArgs e)
{
if (IsLoading) return;
Update(); // いろいろ計算処理
}
private void OnLoaded(object sender, RoutedEventArgs e)
{
IsLoading = false;
}

これで劇的に早くなったが、こんなんでいいんかなぁ..?

気になるキーワード