スポンサーサイト

--.--.--.--.--:--
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

なぜかビルドエラー(デザイナのエラー)が消えない

2012.09.29.Sat.19:18
ちゃんと動くコード(XAML)のはずなのに、ビルドエラーが出る。
デザイナーがちゃんと表示されない。


あると思います。


そんな時には、まずはクリーンしてビルド。

それでもだめなら、VisualStudioを再起動。

それでもだめだったら、プロジェクトのbinとobjディレクトリを削除


もし、本当にコードが正しければ、これで大体の場合は動くようになるはず。

特にデザイナーのエラーはVisualStudio再起動が効果的。
スポンサーサイト

表示中のMessageDialogをコードから消す

2012.09.27.Thu.23:23
ちょっと調べてみたけど、なかなか答えにたどり着けなかったのでメモ。

通常、一度表示したMessageDialogを消すには、MessageDialog上のボタンをクリックしないと消えません。
しかし、時にはコード側からMessageDialogを消したいこともあります。
(基本的にはそんなことをしないようにUI等を設計する必要がありますが…)

とりあえず、下記コードを実行すると5秒後に消えます。
ThreadPoolTimerで行けるということはUIスレッドじゃなくてもいいのかな?


var dialog = new MessageDialog("test");
var cmd = dialog.ShowAsync(); // awaitを使わずに表示

// 5秒後にcmd(IAsyncOperation<IUICommand>)をキャンセル
ThreadPoolTimer timer = ThreadPoolTimer.CreateTimer(
(_) => { cmd.Cancel(); },
TimeSpan.FromSeconds(5));

ComboBoxのDisplayMemberPathとKeyValuePair

2012.09.26.Wed.21:57
またもやWinRTのバグにぶち当たったのか…?

ComboBoxのItemsSourceに以下のようなKeyValuePairのListをセットし、DisplayMemberPathで、"Value"を表示しようとするとエラーを吐く。


var test = new List<KeyValuePair<int, string>>{
new KeyValuePair<int, string>(0, "黒"),
new KeyValuePair<int, string>(1, "茶"),
new KeyValuePair<int, string>(2, "赤")
};
combobox.ItemsSource = test;
combobox.DisplayMemberPath = "Value";


Cannot get 'Value' value (type 'String') from type 'System.Runtime.InteropServices.WindowsRuntime.CLRIKeyValuePairImpl`2[[System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=…],[System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=…]], mscorlib, ・・・

といった例外が出力される。

WPFで同じコードを試してみるとちゃんと「黒・茶・赤」が出たので、書き方は間違ってないはず。

それっぽいバグレポートはあったけど、どうなったんだろう…

とりあえず、こんなクラス作って暫定的に対応。


public class KeyValue<Tkey,Tvalue>
{
public Tkey Key { get; set; }
public Tvalue Value { get; set; }
}

[XAML] ListViewのアイテムを横幅いっぱいに広げる

2012.09.24.Mon.19:51
ListViewをつかったアプリを作っていて、ちょっと困ったのがListViewのアイテムをListViewの幅いっぱいまで広げたいのに、HorizontalAlignmentがLeftになっているため、いくらItemTemplateでStretchを指定しても広がってくれない。

この問題、WindowsPhoneでもあったので、WindowsPhoneの方法でやってみるもダメ。
仕方がないので、四苦八苦しながら考え出した結果がこちら



<ListView.ItemContainerStyle>
<Style TargetType="ListViewItem">
<Setter Property="HorizontalContentAlignment" Value="Stretch" />
</Style>
</ListView.ItemContainerStyle>


ListViewのContentPresenterはTemplateBindingでHorizontalAlignmentにHorizontalContentAlignmentをセットしているようなので、テンプレートであろうListViewItemのスタイルで、Stretchを指定してやります。

NewsReaderテンプレートのバグと修正

2012.09.15.Sat.13:21
Microsoftでは現在、Windows8アプリ開発体験テンプレートが公開されています。

この中に所謂RSSリーダーのテンプレートとして、
NewsReader テンプレート XAML/C# 用 Version 1.0があります。
このテンプレートを使ってWindows8アプリを作っていたところ、一つバグを発見しました。


○オフラインモード時に検索を繰り返すとグループがどんどん増える


再現手順:
1.無線LANをOFFにするなどしてインターネットに接続できない状態する
2.チャームの検索フォームからNewsReaderアプリを選択し、何も入力せず検索を行う
(ALLの記事数を覚えておく)
3.そのまま、もう一度検索を行う

結果:
Allの記事数が検索するたびに増える

NewsReaderBug1.png

  ↓

NewsReaderBug1.png


Allの件数だけ増えているのはフィードのグループが増えているからです。

NewsReaderテンプレートではアプリ起動時にインターネットに接続できない場合、前回起動したときのキャッシュからデータを作成し、オフライン時でも閲覧できる機能があります。しかし、キャッシュからデータを作成する際に前のデータを消さずに追加しているため、検索するたびにどんどん増えていくわけです。

修正するには、NewsDataSource.csのLoadData関数を下記のように修正します。


// オフライン状態で起動した際に、永続化済みのフィードから読み取る
// asyncキーワード、戻り値 を追加 by arai
public static async Task LoadData()
{
//***** ↓の行を追加 *****//
_NewsDataSource._allGroups.Clear(); // いったんすべてのデータをクリア

// 実装コード by arai
var boolResult = await SerializedHelper.LoadDataAsync(_NewsDataSource._allGroups);

return boolResult;
}


とりあえずの修正は↑でOKです。
読み込み済みの場合はLoadData()を呼ばないとかでも良いと思います。

なお、この問題はMicrosoftさんのほうでも認識されているようで、修正版が出るそうです。
 | HOME | 
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。