平々毎々 (Hey hey, My my)

rock and roll can never die.

カテゴリーアーカイブ: Silverlight

Silverlight+LINQでトランプ

岩永さんの「C#で大富豪」からパクったインスパイヤされた。


このコンテンツの再生にはSilverlight2が必要です。下の画像をクリックしてください。
Microsoft Silverlight を取得

ソースコードはここ。

練習を兼ねて、ListBoxにバインドしてみた。
Page.xamlはこう。

<UserControl x:Class="Millionaire.Page"
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  xmlns:my="clr-namespace:Millionaire"
  Width="108" Height="412"
  Loaded="UserControl_Loaded">
  <UserControl.Resources>
    <my:CardImageConverter x:Key="cardImageConverter" />
    <Style x:Key="CardPreview" TargetType="Image">
      <Setter Property="Margin" Value="1,1,1,1"/>
      <Setter Property="Width" Value="43"/>
      <Setter Property="Height" Value="60"/>
    </Style>
  </UserControl.Resources>
  <Grid x:Name="LayoutRoot" Background="White">
    <Grid.RowDefinitions>
      <RowDefinition Height="*"/>
    </Grid.RowDefinitions>
    <Grid.ColumnDefinitions>
      <ColumnDefinition Width="55"/>
      <ColumnDefinition Width="*"/>
    </Grid.ColumnDefinitions>
    <ListBox x:Name="CardList" Background="LightGray"
    Grid.Row="0" Grid.Column="0">
      <ListBox.ItemTemplate>
        <DataTemplate>
          <Image
            Source="{Binding Converter={StaticResource cardImageConverter}}"
            Style="{StaticResource CardPreview}" />
        </DataTemplate>
      </ListBox.ItemTemplate>
    </ListBox>
    <Button x:Name="ShuffleButton" Grid.Row="0" Grid.Column="1"
    Content="Shuffle" Click="ShuffleButton_Click" />
  </Grid>
</UserControl>

型コンバーターはこう。

using System;
using System.Globalization;
using System.Windows.Data;
using System.Windows.Media;
using System.Windows.Media.Imaging;

namespace Millionaire
{
  public class CardImageConverter : IValueConverter
  {
    public object Convert(object value, Type targetType,
      object parameter, CultureInfo culture)
    {
      if (targetType != typeof(ImageSource))
        return null;
      Card c = value as Card;
      if (c == null)
        return null;
      string name = (c.Suit == Suit.Joker)
        ? "joker"
        : string.Format("{0}{1:00}", "cdhs"[(int)c.Suit], c.Number);
      return new BitmapImage(
        new Uri(string.Format("Images/{0}.png", name),
        UriKind.Relative));
    }

    public object ConvertBack(object value, Type targetType,
      object parameter, CultureInfo culture)
    {
      return null;
    }
  }
}

あとはバインドするだけ。

private void Shuffle()
{
  Random random = new Random();
  IEnumerable<Card> cards = Enumerable.Range(0, 53)
    .OrderBy(x => random.Next())
    .Select(x => new Card(x))
    .Take(6)
    .OrderBy(x => x.Rank)
    .ThenBy(x => x.Suit);
  CardList.ItemsSource = cards;
}

やってみて思ったけど、ListBoxそのままだと縦長だし複数選択はできないし、こりゃないわー。

広告

Fleverlight勉強会 vol.2 行ってきた

Fleverlight勉強会 vol.2 行きたいな

ほぼタイトルがすべてですが、11/22の土曜日に大阪でFleverlight勉強会 vol.2が開催されるので、行ってみたいなと。

Silverlightに3Dゲーム&quot;Quake&quot;を移植中

QuakeLight, the Silverlight port of Quake, is coming…

ほほう。
しかし、Flashみたいに環境が整備されているわけじゃないので、ハードルは高そうだ。
ちなみにFlashの環境の話は、「C 言語で書かれたソフトウェアが Flash で動くようになるかもしれない | METAREAL」とか、LL Future 「古い言語、新しい言語」におけるalohakunの発表資料(ppt)とかを参照のこと。

Silverlight 2 RTW対応した

今までブログにあげていた、Silverlight2 Beta用コンテンツをRC0および正式版で動くようにした。

Silverlightの起動パラメータに

<param name="minRuntimeVersion" value="2.0.30930.0">
<param name="autoUpgrade" value="true">

と書いておくと、RC0と正式版以外ではこんなダイアログが出る。
Silverlight Update 1

“Remind me later”をクリックすると、こんな表示になる。
Silverlight Update 2

正式版を強制するのなら、minRuntimeVersionの値を”2.0.31005.0″にすればいい。

なお、対応したコンテンツは

だ。

Silverlight 2.0 RTW

インストールされてるSilverlightのバージョンを知るJS

こんな記事を書いても4人ぐらいしか読まないのでは……

Silverlight 2.0のインストール用ページに含まれているJSをざっと読んだ。

ポイントは、

  • ActiveXコントロールの場合はIsVersionSupported()で細かく問い合わせていくしかない
  • Mozillaプラグイン(Netscapeプラグイン)にはdescriptionプロパティがあるのでそこを見ればいい
  • ところがMacOSのMozillaプラグインだとdescriptionプロパティは”major.minor. build” までしか返してくれないので、revisionを知りたければやっぱりIsVersionSupported()で細かく問い合わせていくしかない

ということのようだ。

http://www.microsoft.com/silverlight/scripts/General.jsより抜粋

http://www.microsoft.com/silverlight/scripts/Install.jsより抜粋

http://www.microsoft.com/silverlight/scripts/silverlight/General.jsより抜粋

(追記)2.0RTWになって少し修正された。

Dynamic Languages SDK 0.3.0

Dynamic Languages SDK 0.3.0
Tech Edも終わり、LL Futureに行ってる間に出てたみたいだ。全部乗せアーカイブも提供される。名前募集中だってさ(Silverlight Dynamic Languages SDKも、sdlsdkも、どっちもひどいから)

SilverlightのWebClientがキャッシュする件続き

IEでAjaxリクエストをキャッシュさせない方法 – PHPプロ!ニュースに載ってたように、SilverlightでIf-Modified-Sinceヘッダをくっ付けたらキャッシュを見なくなった。なるほどね、サーバに問い合わせるもんね。

If-Modified-Since: Thu, 01 Jun 1970 00:00:00 GMT

ここで試せる。ソースはいらないよね。

client.Headers[HttpRequestHeader.IfModifiedSince] = "Thu, 01 Jun 1970 00:00:00 GMT";

を入れただけだから。

SilverlightのWebClientがキャッシュする件

Silverlight+T2でちょいちょいサンプル作っているのですが、汁バラのWebClientがたまにリクエストを飛ばしてくれない。

なんだか勝手に自分が抱えてるキャッシュを返してくるコマッタちゃんです。

2008-08-13 – おおたに6号機blog

試してみたソースはここ
Firefox3だと毎回リクエストしてるが、IE7だとキャッシュを読みに行ってるように思える。
キャッシュしないようにするには……サーバー側でheaderを出力するか?(あとで考えたり試したりする)

(追記)サーバー側でhttp headerを追加してやればIE7でもキャッシュを見ないようになることは確認できた。他に方法はないか?

Cache-Control: no-cache

(追記2)Silverlight側のHackで対応できた。