Home > Programming > [WPF] WPFでいろいろ躓いたところ

[WPF] WPFでいろいろ躓いたところ

描画領域を取得したい場合は、 RenderSize が使える。以下は、コンテンツが 590×450になるようにウィンドウサイズを変更する例。

private void buttonAdjustWindowSize_Click(
	object sender, RoutedEventArgs e)
{
	Width -= (grid.RenderSize.Width - 590);
	Height -= (grid.RenderSize.Height - 450);
}

Window -> grid -> その他もろもろ といった感じにコントロールを配置しているので、grid の大きさが、いわば Form アプリの ClientRect() に相当する感じになっているので、それを利用してみた。

まぁ、API でガリガリとウィンドウ枠の幅を取得しても良かったんだけど、めんどくさいしね。

スレッドを走らせて、そこから WPFコントロール のプロパティにアクセスする例。

void StoreBijinClockPhoto()
{
    /*... Get photo and save to "filename"... */

    Dispatcher.BeginInvoke(
        new SetSourceToImageDelegate(SetSourceToImage));

    // Invoke(new SetSourceToImageDelegate(SetSourceToImage));
}

delegate void SetSourceToImageDelegate();

void SetSourceToImage()
{
    image.Source = new BitmapImage(new Uri(filename));

    DoubleAnimation animation = new DoubleAnimation();
    animation.From = 0;
    animation.To = 1;
    animation.Duration = TimeSpan.FromSeconds(3);
    image.BeginAnimation(OpacityProperty, animation);
}

Invoke() が使えないのでどうするんだ…と思ったが、Dispatcher.BeginInvoke() というものがあるんだそうな。

SetSourceToImage() の後半はアニメーションの例。

複数の animation を同時に扱いには ストーリーボード を利用するのだそうな。

ここでは、 image(Imageコントロール)の Opacity(Double型)を0から1へ3秒かけて増やしていくアニメーションを作成している。Double型をいじりたいので、DoubleAnimation を生成、それに From, To, Duration を設定し、image.BeginAnimation で、作成したanimationをOpacityに割り当てる。

これで、image に画像を割り当てた時に、もわーっと画像が現れるエフェクトを作成できる。応用すれば、画像がくるくる縮小・拡大して切り替わるとか、画像が右に消えて左から新しい画像が現れるとか、まぁ、そんな切り替えエフェクトが簡単にできそうだよね。

image

image

WPF のウィンドウって枠が消せないのかなぁ…。WindowStyle を None にしてもだめだわ…。ま、気長に悩みますか。

今日は少しお出かけしてきます。んじゃね。

Home > Programming > [WPF] WPFでいろいろ躓いたところ

My Friend Feed

http://friendfeed.com/daruyanagi

Google Analyticator

615
 Unique Visitors 
 (1 day) 
Powered By Google Analytics

Return to page top