WPF(XAML,XBAP,.NET3.5)GUIプログラミング Part3 at TECH
WPF(XAML,XBAP,.NET3.5)GUIプログラミング Part3 - 暇つぶし2ch351:デフォルトの名無しさん
09/02/24 22:48:31
Bitmapの処理はメモリをロックしてアンマネージでポインタを使わないと遅いぞ~。

352:デフォルトの名無しさん
09/02/24 22:52:26
ここはWPFスレですよ
WiteableBitmapは十分速いよ
もともと>>351みたいな書き込みの方法しか用意されてない

353:デフォルトの名無しさん
09/02/24 23:03:59
writeableBitmapにコピーするデータ作るのに時間かかってるんだろうが

354:333
09/02/24 23:05:09
>>347
>>340 は俺へのレスだったのか。すまん。
reflector は知ってたけど、Windows フォトギャラリー って .net のプログラムだったんだ?
今日は出先なんで無理だが、家帰ったら試してみる。

>>349
そうなんだよ。だから、フォトギャラリーがどうやってるかわかればなぁ・・・と。

>>350 >>351 >>352
WritableBitmap で unsafe でポインタ使っても遅くて、
C++ で書き直して1秒切るところまでいったんだが、
まだ遅いので質問するにいたったわけです。

355:333
09/02/24 23:06:15
>>353 そのとおりです。

356:デフォルトの名無しさん
09/02/24 23:07:03
アルゴリズムが違うとか,プレビュー用に簡易に処理してるとか
いずれにしてもこれ以上はスレ違い

357:デフォルトの名無しさん
09/02/24 23:13:09
HLSLでやってみるとか
WPFでも使えるようになったことだし

358:デフォルトの名無しさん
09/02/24 23:21:00
>>354
もはやあれで半分反則だけどこんなのがある。反則なので速いと
いっていいのかわからんが

URLリンク(www.codeplex.com)

川西先生の紹介↓
URLリンク(blogs.msdn.com)

ちなみにちょっとビルドに注意。Codeplex にある別のやつがいる

359:デフォルトの名無しさん
09/02/25 04:54:37
Windows Formsコントロールのオーナードロー拡張なんてもういやだ。
WPFの入れ子コントロールとXAMLが欲しい。
あと文字の強制アンチエイリアスはさせたくない。

こんな要望に対するソリューションて現状ある?

360:347,340
09/02/25 05:17:51
>>354
え、WPFスレで、しかもWPFでどうやるのかって質問だったから、.NETプログラムなのかと勝手に
勘違いしてしまった。そうでないのなら、普通にシェーダ使ってるんじゃないの?

純粋なWPFアプリケーションだとしたら、>>358なんかで紹介されているWPFでのシェーダの使用
は最近の更新で可能になったものだから、Vista標準のプログラムとしてはないと思う。

結局、.NETプログラムじゃない、シェーダを使ってるか、画像処理を気合で頑張っている、つまり
スレ違いって所で落ち着きそうだ。

361:デフォルトの名無しさん
09/02/25 06:14:00
>>359
XAMLの中で、例えばテキストボックスに

 <TextBox RenderOptions.EdgeMode="Aliased" x:Name"textbox1" ~ />

と記述した場合、カーソルバーは1ドット幅の縦棒でシャキーンと表示されるけど、テキスト文字だけは
常にアンチエイリアス処理されますね。これだけ我慢すれば、最良のソリューションじゃないでしょうか。

362:デフォルトの名無しさん
09/02/25 09:29:50
>>359
Form上でそれ実現する奴作った。それ使ったシステム5月ぐらいにリリース予定。

363:デフォルトの名無しさん
09/02/25 09:32:20
手伝おう
テストするからうpして

364:デフォルトの名無しさん
09/02/25 09:52:25
写真だけうp
URLリンク(www.rupan.net)

365:デフォルトの名無しさん
09/02/25 11:10:48
>359
ElementHost使えば、winformsにコントロール単位でWPFコントロール
持ち込めるだろ。例えば、ListBoxだけとか。

んで、起動時にSystemFontsの中から適当なの選んで設定すれば、
フォントもwinforms同様になる。

366:デフォルトの名無しさん
09/02/25 13:33:55
初心者な質問で恐縮です。
InkCanvasのペンの色を変える方法を教えてください。
xamlとC#と両方の方法をお願いします。


367:デフォルトの名無しさん
09/02/25 13:40:27
URLリンク(msdn.microsoft.com)
MSDN読めないならWPFなんか手を出さない方がいい

368:デフォルトの名無しさん
09/02/25 17:45:18
キーバインディングでメソッドを呼ぶときは、どのように書けばいいですか?
たとえばEnterで、設定ボタンを押すとき。
C#だけなら、
private void settingbutton_Click(object sender, EventArgs e){}
を呼ぶには、
settingbutton_Click(this, EventArgs.Empty);
と書けばいいのですが、xamlではどう書けばいいですか?
<KeyBinding Key="Enter" Command="Close"/>
のCommandのところに書けばいいのかと思っているのですが、ここを適当に書くと、
'CommandValueSerializer' ValueSerializer は 'System.String' から変換できません。
とエラーになります。System.Stringということは、デフォルトでいくつかきまっていると思うのですが、その一覧はどこにあるのでしょう?
またその一覧のなかで、メソッドを呼ぶStringはなにでしょう?
よろしくお願いします。


369:デフォルトの名無しさん
09/02/25 17:59:24
> settingbutton_Click(this, EventArgs.Empty);
> と書けばいいのですが、
の意味が心底分からんが

適当にCommandsクラスとか作ってコマンドごとにRoutedUICommandのstatic readonlyフィールドを用意
それをKeyBinding.Commandに設定
あとはCommandBindingでコマンドが呼び出すメソッドを設定

370:デフォルトの名無しさん
09/02/25 18:12:04
す…、すまん。ぜんぜんだめだ。
おれが適当に書くとエラーの山だ。
適当にCommandsクラスをどこに作る? .csのほう?

public partial class Commands : Window {
}

コマンドごとにRoutedUICommandのstatic readonlyフィールドを用意
コマンドごと…。ってことは、設定コマンドを作るのだから、

public partial class Commands : Window {
Setting
}

それをKeyBinding.Commandに設定
xamlで
<KeyBinding Key="Enter" Command="Setting"/>

CommandBindingでコマンドが呼び出すメソッドを設定
private void setting(object sender, EventArgs e){//メソッド}

添削頼む…。


371:デフォルトの名無しさん
09/02/25 18:28:17
> 適当にCommandsクラスをどこに作る? .csのほう?
> public partial class Commands : Window {
System.Windows.Input.ApplicationCommandsみたいにstaticクラスでいいよ。
新しくcsファイル作ってそこにでも。
まあ別にCommandsクラスじゃなくてもいいけどな。肝心なのはRoutedUICommandのフィールドだから。
ApplicationCommandsみたいにICommandは一つにまとめるのが自然だと思っただけで。

つかまずApplicationCommands.CloseとかでKeyBindingとCommandBinding使ったの書いてみろよ。
MSDNやヘルプのこれらのクラスの解説にサンプルがいくらでもあるから。

372:デフォルトの名無しさん
09/02/25 18:42:14
WPFの根幹ってWin32API群なの?
.NET とどう違うの?


373:デフォルトの名無しさん
09/02/25 19:08:57
WPFも.NETで動くことは変わらない
WPFはSystem.Windows.Formsに代わる新しいGUIフレームワーク
最大の特徴は,Win32ネイティブのコントロールを使用せずにウインドウの中身を
一枚の絵としてすべてのコントロールをDirect3Dで自前で描画してること
ゲームの画面にたくさんのキャラクターを描画するのと同じ仕組み

374:デフォルトの名無しさん
09/02/25 19:16:26
ApplicationCommands.CloseでKeyBindingとCommandBindingのは書けてます。
xamlに
<KeyBinding Key="E" Modifiers="Control" Command="Close"/>

csに
private void Close_Executed(object sender, RoutedEventArgs e ){Close();}
public void Close(object sender, CancelEventArgs e){}
です。
じゃあsittingの場合は…。
xamlに
<KeyBinding Key="S" Modifiers="Control" Command="setting"/>

csに
private void setting_Executed(object sender, RoutedEventArgs e ){setting();}
public void setting(object sender, CancelEventArgs e){}
としてはまってるわけです。

で、System.Stringの一覧はどこにあるのでしょう?


375:デフォルトの名無しさん
09/02/25 20:11:33
System.Stringは文字列型の事だよ。

それと、<KeyBinding ほにゃらら だけじゃなくて、それと
<CommandBinding ほにゃらら
がセットになって初めてコマンドのバインディングができる。

それから、
<KeyBinding Key="E" Modifiers="Control" Command="Close"/>
の Command="Close" って記述においては、ApplicationCommandsが特別扱いされている。
より冗長だが汎用的な書き方は
<KeyBinding Key="E" Modifiers="Control" Command="ApplicationCommands.Close"/>
となる。つまりクラスのフィールドを指定しているわけ。多分そのエラーメッセージは、この指定
がうまく行っていないという事。それでもって、自分で作ったクラスの静的フィールドを指定する
には、さらにxamlのマークアップ拡張を使う必要がある(多分)。

だから、xamlは
<Window x:Class="Foo.Window1"  
...
    xmlns:foo="clr-namespace:Foo">
  <Window.CommandBindings>  
    <CommandBinding Command="{x:Static foo:Window1.FooCommand}" Executed="FooCommand_Executed" />    
  </Window.CommandBindings>
  <Window.InputBindings>
    <KeyBinding Key="f" Modifiers="Control" Command="{x:Static foo:Window1.FooCommand}" />
  </Window.InputBindings>  
</Window>
で、Window1.xaml.csの中の# public partial class Window1 : Window  {...}の中に
staticでreadonlyなFooCommandフィールドと、FooCommand_Executedメソッドを実装する。

多分こんな感じ。

376:375
09/02/25 20:21:42
>>375は俺自身参考にした事がある
URLリンク(blogs.wankuma.com)
の記事を読み直してまとめたもの。詳しくはリンク先の記事を、やる気があれば
連載になっているから最初から、読んで行って。

377:デフォルトの名無しさん
09/02/25 21:00:22
実験してみたけど、
Command="{x:Static foo:Window1.FooCommand}"

Command="foo:Window1.FooCommand"
とどちらでも問題ないみたい。だから必ずしもx:Staticのマークアップ拡張を使う必要はない。

378:デフォルトの名無しさん
09/02/25 21:44:38
>>373
ありがとうございます
DirectX系で壁画するということはGPUと相性がよさそうですねVista Aeroなんかとも


379:デフォルトの名無しさん
09/02/26 08:10:20
原始人現る

380:デフォルトの名無しさん
09/02/26 08:20:15
壁画って何だよ?

381:デフォルトの名無しさん
09/02/26 09:15:54
>>373
WPFで作ったアプリのUIを自動テストするのは、どんな感じ?
大昔つくったアプリは、コントロールにメッセージ送りつけてやったけど。

382:デフォルトの名無しさん
09/02/26 10:00:52
UI Automationという機能を使うらしい

383:デフォルトの名無しさん
09/02/26 14:11:27
だれか優しくスマートに懇切丁寧におしえろ。
ListBox.Items.Add("うんこ")見たいな物を3回ループしてやると選択がくるっとんねんけどな、コンテンツだと正常なんだわ。
ListBoxて文字でアイテム管理しとん?
解決方法どないやねん???
>>384

384:デフォルトの名無しさん
09/02/26 14:19:06
質問が把握できないので返答もできないわ。力になれなくてごめん。

385:デフォルトの名無しさん
09/02/26 14:21:26
そんな答えほしなかったわぁー。
おっちゃんも暇ちゃうねん、出来るだけはよう答えてくれへんか?
色々問題もあってやな、今火達磨状態やねんで?

誰かに伝えたいこの想い

386:デフォルトの名無しさん
09/02/26 16:53:09
>>381-382
皆さん、UnitTestのテストレポートってどうしてる?
基本的に、初期値、幾つかの中間値、そして境界値とその内外だけを確認?

387:デフォルトの名無しさん
09/02/26 23:46:12
UnitTest?なんですかそれは
ゆとりにもわかるように説明してください

388:デフォルトの名無しさん
09/02/28 01:04:38
WPFで読み込んだファイルの取り扱いについて質問があります。
下記のようにファイルを読み込むとロックするのですが、
string imgFile = @"C:\tmp.jpg";
img.Source = new BitmapImage(new Uri(imgFile));
ロックをはずす方法を教えてください。

ちなみにFormの場合には、
pictureBox1.Image = Bitmap.FromFile(imgFile);
pictureBox1.Image.Dispose();
でロックをはずすことができます。
よろしくお願いします。


389:デフォルトの名無しさん
09/02/28 01:41:22
Windows.FormsのBitmapでロックされないように
MemoryStreamに読み込んでそこからBitmapを読み込むことはよくやる。
同じようにMemoryStreamに読み込ませてBitmapDecoderで読み込めばいいんじゃないかな?

390:デフォルトの名無しさん
09/02/28 02:07:24
>>388
BitmapImage bmp = new BitmapImage();

bmp.BeginInit();
bmp.UriSource = new Uri(imgFile);
bmp.CacheOption = BitmapCacheOption.OnLoad;
bmp.EndInit();

391:デフォルトの名無しさん
09/02/28 02:49:29
みなさま。
早速ありがとうございます。
>>390
これで試してみました。
しかし、ウィンドウは開くものの、ファイルはなにも表示されなくなってしまいました。


392:デフォルトの名無しさん
09/02/28 12:30:28
>>391
コントロールに読み込んだイメージセットしてないだろ

393:デフォルトの名無しさん
09/02/28 12:38:49
UI要素の下や上だけに境界線を引くにはどうしたらいい?

394:デフォルトの名無しさん
09/02/28 12:46:38
>>392
bmp.UriSource = new Uri(imgFile);
だけではセットしたことにならないの?
セットの方法を教えてください。


395:393
09/02/28 12:57:36
自己解決
<Border BorderBrush="Black" BorderThickness="0 1 0 0">

396:デフォルトの名無しさん
09/02/28 13:27:07
>>394
処理の内容ちゃんと理解しなきゃ

397:デフォルトの名無しさん
09/02/28 13:33:32
>>394

>>388に書いてある
img.Source = new BitmapImage(new Uri(imgFile));
ってコードの、右辺の処理new BitmapImage(new Uri(imgFile))をファイルがロックされないように
書き直したのが>>390。出来上がったBitmapImageのインスタンスをimg.Sourceから参照させる
処理は書かなきゃ。

398:デフォルトの名無しさん
09/03/01 18:29:38
できました。1日いろいろ試してました。

(1)img.Source = new BitmapImage(imgFile);
(2)BitmapImage img = new BitmapImage();
img = imgFile;
(3)BitmapImage img = new BitmapImage();
img = bmp;
(4)BitmapImage img = new BitmapImage();
img.Source = bmp;
(5)BitmapImage img = new BitmapImage();
img.Source = bmp;
(6)BitmapImage img = new BitmapImage(bmp);

結局次のようにしてできました。
BitmapImage bmp = new BitmapImage();
bmp.BeginInit();
bmp.UriSource = new Uri(imgFile);
bmp.CacheOption = BitmapCacheOption.OnLoad;
bmp.EndInit();
img.Source = bmp;


399:デフォルトの名無しさん
09/03/01 18:30:14
処理の内容の理解をしている限りでは、
BitmapImage bmp = new BitmapImage(); //あたらしいbmp変数を作る。bmpのインスタンスを作る。
bmp.BeginInit(); //bmpの処理を始める。
bmp.UriSource = new Uri(imgFile); //bmpにUriソースからデータを読み込む。
bmp.CacheOption = BitmapCacheOption.OnLoad; //??
bmp.EndInit(); //読み込みの終了。これでディスクとは切り離される。
img.Source = bmp; //画面のimgにbmpをいれる。これでimgにbmpを表示できる。

これで表示はできロックもなくなりました。
しかしながら、問題が。
目的のファイルの削除をする、という動作がまだできないままなのです。

削除処理は次のように書きました。
private void button1_Click(object sender, RoutedEventArgs e)
{
System.IO.File.Delete(imgFile);
}
これでボタンを押すと、ウィンドウが消えるのですが、ファイルは残ったままです。
アドバイスお願いします。


400:デフォルトの名無しさん
09/03/01 20:07:14
>>399

string path = @"C:\test.jpg";
BitmapImage bmp = new BitmapImage();
bmp.BeginInit();
bmp.UriSource = new Uri(path);
bmp.CacheOption = BitmapCacheOption.OnLoad;
bmp.EndInit();
image1.Source = bmp;
System.IO.File.Delete(path);

これで動いたよ


> 削除処理は次のように書きました。
> private void button1_Click(object sender, RoutedEventArgs e)
> {
> System.IO.File.Delete(imgFile);
> }
これのパスを間違えてるとかじゃね

401:デフォルトの名無しさん
09/03/01 20:14:16
>>399
>bmp.CacheOption = BitmapCacheOption.OnLoad; //??

分からなければMSDNで調べろよ…
URLリンク(msdn.microsoft.com)
URLリンク(msdn.microsoft.com)

402:デフォルトの名無しさん
09/03/01 20:18:44
> bmp.CacheOption = BitmapCacheOption.OnLoad; //??
なんだよそれ?いい加減にしろよ。

URLリンク(msdn.microsoft.com)(VS.80).aspx
これ全部読むまで再質問禁止。

403:デフォルトの名無しさん
09/03/01 20:27:25
>>400
ありがとうございます。
なんだかわからないのですが、一度終了して再起動したら動くようになりました。
いろいろありがとうございました。


404:デフォルトの名無しさん
09/03/02 16:49:22
WPFの「Frame」カスタムコントロール作成でこけましたorz
Blendで作ってもらったFrameのXAMLをVSで読み込ませると
「'Frame' ControlTemplate TargetType は、テンプレートの型 'PlaceHolderControl' と一致しません。」(エラー場所は無駄な事言ってるので省きました)
と、例外が発生します。
コントロールを作ってもらっても一緒です。
しかし、これらは実際バグっているわけでもなく、ビルドもコンパイルも正常に動きます。
どうもVSのデザイナだけがこけています。

何かいい回避方法(Frameに似たコントロール)などありませんか?
よろしくお願いします。

環境:Windows7 VS2008

405:デフォルトの名無しさん
09/03/02 19:17:27
言ってることがよくわからない
FrameのControlTemplateを作ってるの?それ何の意味があるの?
そんなことしないでユーザコントロールにFrameを張り付ければ一緒だと思うんだが

406:デフォルトの名無しさん
09/03/02 19:29:38
FrameってHTML表示したいときとか
「戻る」「進む」ができるようにしたいときに使うんだよわかってる?
コンテンツを飾り付けしたいだけならDecoratorの派生クラス(Borderなど)使う
もちろんFrameを飾り付けするのにもDecoratorが使えるし,普通はテンプレート使わずにそうする

407:デフォルトの名無しさん
09/03/02 19:34:06
すいません、言うべき事が抜けすぎでした・・・
分け合って「Frame」コントロールを作ってもらいました。
これはWebページとXAMLファイルを頻繁に行き来することになったのでこのようにしています。
そしてコントロールにする必要があるのは、そのFrameの中にゴチャゴチャしたものをつける必要があったのです。

発注したコントロールに問題があるのかと思ったのですが、Frame自体を少しでも変えるとおかしくなります。
<Window.Resources>
<ControlTemplate x:Key="FrameControlTemplate1" TargetType="{x:Type Frame}"/>
</Window.Resources>

<Grid x:Name="LayoutRoot">
<Frame Margin="128,160,200,131" Content="Frame" Template="{DynamicResource FrameControlTemplate1}"/>
</Grid>
このような簡単なものでもエラーになってしまいます。

理由を教えてください

408:デフォルトの名無しさん
09/03/02 19:42:32
ちょっと状況が良く分からないんだけど、WPFにFrameコントロールがあるので
衝突しているんじゃないかな?
 
xmlns宣言で名前空間への参照を追加して、名前空間込みで「Frame」コントロールや
そのx:Typeを指定したらどうだろう?

409:デフォルトの名無しさん
09/03/02 19:48:34
その自作FrameのTemplatePart属性は確認した?

410:デフォルトの名無しさん
09/03/02 21:00:28
>>408
ちょっと判らなかったです・・・
MSDNをみてやってみたのですがうまくいきません。
アセンブリは「PresentationFramework.dll 内」となっているので問題ないですが、
XMLNSは参照して追加しても「タグ 'Frame' は、XML 名前空間 'URLリンク(schemas.microsoft.com)' にありません。」
となってしまいます。

色々やってみた結果、
<Frame Margin="120,192,136,139" Content="Frame" Template="{DynamicResource FrameControlTemplate1}">
<Frame.Resources>
<ControlTemplate x:Key="FrameControlTemplate1" TargetType="{x:Type Frame}">
<ContentPresenter />
</ControlTemplate>
</Frame.Resources>
</Frame>
ではVSでもBlendでもデザイナで編集したり、コンパイルできたりするようになりました。
結局こうなってしまう理由がわかりませんw
リソース内でFrameのスタイルを指定させたいのですが、どうしてもうまくいかない・・・

>>409
これはどういうことでしょうか?
「TemplatePart」というのが判らず仕舞いになってしまいましたorz
申し訳ないです。;;

411:デフォルトの名無しさん
09/03/02 21:08:56
コントロールテンプレートは完全に自由に書いていいわけじゃなくて,
最低限テンプレートに含めないといけないコントロールが決められてるのが普通
それを示す属性がTemplatePart
逆に,そういう条件が必要ないならあまりテンプレートを使う意味がない

412:デフォルトの名無しさん
09/03/02 21:19:23
>>410
ツール-オプション-テキストエディタ-xaml-その他-既定のビュー

「常にフルxamlビューでドキュメントを開く」
のチェックを外せば直るみたい。

でも、xaml直書きする場合、このチェックは入れておきたいよねえ。
なんか普通にバグっぽいぞ。

413:デフォルトの名無しさん
09/03/02 21:38:27
>>411
>コントロールテンプレートは完全に自由に書いていいわけじゃない
てっきり何をしてもいい>>412
物だだと思っていました!
TemplatePartは詳しく調べる必要があるようです。

>>412
うまくいきませんでした・・・
どうしても「'Frame' ControlTemplate TargetType は、テンプレートの型 'PlaceHolderControl' と一致しません」がデザイナのみにエラーが出てきます。
コンパイル、ビルドも出来るので間違ってはいないと思いますが、VSのデザイナが使えないというのはキツイです・・・

414:デフォルトの名無しさん
09/03/04 04:37:13
WPFのデザイナは相変わらず貧弱だなぁ

そこが萌えるんだけどw

415:デフォルトの名無しさん
09/03/05 16:28:41
WPF始めてみたいけどネット上には驚くほど資料ないねこれ・・・

416:デフォルトの名無しさん
09/03/05 16:40:00
InteliSenseこそ最上のヘルプ

417:デフォルトの名無しさん
09/03/05 17:02:12
>>416
試すパターンが膨大で困るw

418:デフォルトの名無しさん
09/03/05 17:12:14
書店にも本が並んでない
すべてxamlのせいで敷居が高くなってるせいだと思う
WPFだけなら新しいコントロールライブラリってことで十分普及したと思うよ
Microsoftはxaml使うのをWPFが使われるようになってからに遅らせるべきだった

419:デフォルトの名無しさん
09/03/05 17:25:04
ネットだと
URLリンク(ufcpp.net)
とか
URLリンク(uchukamen.com)
くらいを見て、後はいろんな人のブログを見てバインディング周りの
定石をしれば、本当の話IntelliSenseで十分ヘルプになるようになる
と思う。

420:419
09/03/05 17:26:32
ごめん、419の前にこれを投稿しようとしたんだ。

俺はWPF+XAMLはWindows Formsや昔のWin32APIでウィンドウ
作ってた時代よりも初心者向けだと思うよ。

本がないのも外国語の物は専門性の高い物から入門書まで多いし、
日本の出版事情が大きいんじゃないかな。



421:デフォルトの名無しさん
09/03/05 18:07:43
ちょっと質問!
TextBlockで普通の改行入りテキストを
<TextBlock TextWrapping="Wrap">
あれ?<LineBreak />
声が<LineBreak />
遅れて<LineBreak />
聞こえるよ<LineBreak />
</TextBlock>
こうやって作った後Blendとかに再読み込みさせると「Inline」がいっぱい引っ付いてくるんだけど、この書き方は推奨されていないから?
それともBlendの屁理屈?

422:デフォルトの名無しさん
09/03/05 20:01:29
初心者にとっては(とっつきやすさでは)
Windows Forms > WPF/XAML

Windows Formsは
・XMLを編集しなくていい
・APIのデザインも直感的(使いたい機能が「そこ」にある)

423:デフォルトの名無しさん
09/03/05 21:31:12
>>421
意味が同じだから

424:デフォルトの名無しさん
09/03/05 22:27:40
>>422
WPFはWindowsFormsと同じようにAPIベースで作成できるよ。
名前が違うだけでやってることはほぼ同じ。

初心者ってのはおまえ自身のことだろ。

425:デフォルトの名無しさん
09/03/05 22:31:49
>>423
答えてくれてありがとう!
何かTextBlockも機能的にはとてもいいけど、Labelの方が簡単でとっつき易いなー

426:デフォルトの名無しさん
09/03/05 22:43:40
一般のテキスト表示にはTextBlockを使う
Labelは別のコントロールに文字通りラベルとアクセスキーを付けるためだけに使う
ということでおk?

427:デフォルトの名無しさん
09/03/05 22:45:20
Labelは一行
TextBlockは数行
くらいにしか深く考えたことないや。

428:デフォルトの名無しさん
09/03/05 23:16:17
GDIが早くていいよ

429:デフォルトの名無しさん
09/03/05 23:37:44
>>419

bindingが覚えづらい。xml的お作法としてはああなるのが正当なのかも
しれないけれど、直感に反する書き方だし、わかりづらいし、何とかしてほしい
リソースがらみもそう。

とにかくxamlで中カッコ {}が出てくる場面はうんざりする。なんなのこの変態言語
って感じで。

430:デフォルトの名無しさん
09/03/06 00:33:21
>>429
それ、マークアップ拡張だから、使わないで普通にBinding要素を子要素として
書く事もできるよ。その方がInteliSenseの支援も受けられるし。
 
RelativeSourceが絡んでくる場合とか、マークアップ拡張使うと
中カッコが二重になって>>429が言う通りうんざりする。入力支援
もないし。でも、Binding要素とそのRelativeSourceプロパティに
RelativeSource要素を普通のxmlの文法で書けば嫌な点は解消される。
 
例えば、前に書いた、Canvasに置いてあるViewport3Dの幅をCanvasに合わせる
コードを書いておくね(なぜかHorizontalAlignment=Stretchだとうまくいかなかった)。
 
 <Viewport3D.Width>
  <Binding Path="ActualWidth">
    <Binding.RelativeSource>
      <RelativeSource Mode="FindAncestor"
        AncestorType="{x:Type Canvas}"
        AncestorLevel="1"/>
    </Binding.RelativeSource>
  </Binding>
</Viewport3D.Width>
 
等価なのは
 
<Viewport3D Width={Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Canvas}, AncestorLevel=1}}/>
 
だけど、これだと>>429が言うように支援がなくて書くのが大変だし、
実行時まで間違いが分からないし、実行時の例外の内容は分け分からないしで
嫌になるのも分かる。

431:デフォルトの名無しさん
09/03/06 00:36:17
あと、マークアップ拡張使う方がxmlの入れ子が無闇に深くならなくて済むので
必ずしも悪い事でもない。そこでマークアップ拡張使う場合にお勧めなのが
次のアンチョコ:
URLリンク(go.nbdtech.com?94E138EA)



432:デフォルトの名無しさん
09/03/06 01:39:57
まともなデザイナーがVSについていればもう少し使われやすいと思うんだがな・・・・
Formsはペタこれするのはわかりやすいけれど、それ以上ができない。
WPFはそういうところがエレガントにできるけど、バインディングとか正直わかりにくい。

433:デフォルトの名無しさん
09/03/06 08:13:24
>>429
たしかにな

1.xaml=エレメントの画面表示
2.コード=データの操作
3.補助定義表=それらのバインディング等

みたいに分離してみたらどうなのか。3.を1.にくっつけているからゴチャゴチャになっている。
そういう定義ファイルに、>>430なら、

[ myViewport3D.Width <= myCanvas1.ActualWidth ]

とでも書いておけばそれ1行でOKにする。一目瞭然。初期化等も大方は

[ myWindow1.Background = Brushes.White ]

そこに記述でいいとすれば、xaml自体の方も(エレメントの単純な階層関係記述が基本になり)ごくすっきりする。

でこんなのは、システムがその表を解析して現状xamlに展開する、という形に出来る
(ものが多い、or出来るものだけをこういう初期定義可能にする)だろうから、拡張機能として比較的簡単に出来そうじゃないのか。

434:デフォルトの名無しさん
09/03/06 17:29:22
すいません、バインディングに関する質問です
複数のPage間でテキストデータをバインディングするとき、どうすればいいかわかりません。
名前空間などに定義する方法などが考えられるのですが、一番簡単で効率のいい方法はないですか?

435:デフォルトの名無しさん
09/03/06 17:57:21
このスレをマイクロソフトに教えればわかりやすい資料つくってくれるかもしれないよ

436:>>434
09/03/07 15:56:56
マイクロソフトのサンプルの中にWindow間でデータのバインディングをやっているのを見たのですが、
やっぱり名前空間を全てのWindowのザムルに定義している方法を取っているので、これが妥当だと思う

437:デフォルトの名無しさん
09/03/08 12:54:50
ProgressBarでバーをスムーズに(FormアプリのProgressBarStyle.Continuousみたいに)表示させるには
Templateを弄るしかないんですか?

438:デフォルトの名無しさん
09/03/09 18:06:04
DataContextにオブジェクトが設定してあるとして
LoadedやUnloadedイベントにそのオブジェクトのメソッドを登録したいのですが
コードを書かずにXAML上だけでできますか?

439:デフォルトの名無しさん
09/03/10 04:39:43
ここってsilverlightの話もしていいの?

440:デフォルトの名無しさん
09/03/10 08:15:43
>>439
専用スレあるよ。
Microsoft Silverlight 2.0 その3
スレリンク(tech板)l50

441:デフォルトの名無しさん
09/03/10 21:11:14
↑別スレですか
ありがとうございます

442:デフォルトの名無しさん
09/03/11 10:41:36
誰かMSに報告
Blendにて「Hyperlink」編集不可
直タグ打ち可

443:デフォルトの名無しさん
09/03/11 11:07:30
お前がやれ

444:デフォルトの名無しさん
09/03/11 11:24:06
アカウントとるのめんどくせw

エヘッ♪

445:デフォルトの名無しさん
09/03/11 22:36:52
xamlで記述したプログラムととC#のプログラムって
記述方法が違うだけで使ってるのは同じ.NET frameworkだから
性能とかはかわらないんだよね?

446:デフォルトの名無しさん
09/03/11 23:07:15
かわらん

447:デフォルトの名無しさん
09/03/11 23:08:12
ロードはたぶんXAMLの方が遅い
ロード後の動作は全く一緒

448:デフォルトの名無しさん
09/03/11 23:46:48
ありがと
htmlの描き方が苦手なおれはxamlじゃなくてまずC#でWPF勉強するわ

449:デフォルトの名無しさん
09/03/12 13:07:52
BitmapImageで読み込める画像形式を追加することはできませんか?
できればアプリケーション内でローカルに追加/削除できて
他のアプリケーションには影響しないようにしたいのですが。

450:デフォルトの名無しさん
09/03/12 16:10:21
UriSourceプロパティを使うのはたぶん無理
自前のコードで読み込んでStreamSourceに設定するしかないと思う
でもそうするといちいち他の画像形式に変換しないといけないし
BitmapImageを使う意味もないので
BitmapSource.Createを使ってピクセルデータから直接作った方がいい

451:デフォルトの名無しさん
09/03/12 17:17:54
アニメーション設定とかしてる場合、コードとザムルアニメーションはやっぱりコードの方が優先?
設定できたりする?

452:デフォルトの名無しさん
09/03/12 17:30:33
後で設定した方が有効になるだけだが

453:デフォルトの名無しさん
09/03/12 18:30:36
>>433
> 3.補助定義表=それらのバインディング等

これをデザイナのプロパティウィンドウあたりで簡単に設定できれば
xamlの中に取り込まれていても問題ないと思うんだが。
デザイナがひどすぎると思う。

454:デフォルトの名無しさん
09/03/12 18:42:18
結局デザイナだろ
WinFormsはもっと汚い形でやってるんだから

455:デフォルトの名無しさん
09/03/13 16:04:08
XMLバインディングをやってみたんだけど、「存在するXMLと同期」じゃなくて、
「存在しているXMLをリソースとして利用」のほうが正しい?

どうも作ってみても、EXEの中にリソースとして取り込まれて、XMLファイルの切り替えとかが出来ないw
RSSの仕組みでネットワークにあるものを指定してやると、切り替えとかをネットワーク越しに出来るけどローカルでは無理な感じ。

456:デフォルトの名無しさん
09/03/13 16:32:24
ごめん嘘、忘れて

457:デフォルトの名無しさん
09/03/14 02:47:23
ポカー

458:デフォルトの名無しさん
09/03/14 07:13:23
RichTextBox に Wordwrap プロパティがないんだけども、
改行しないで表示させたい場合どうしたら良いの?

459:デフォルトの名無しさん
09/03/14 14:17:38
TextBoxでいいんじゃね?
RichTextBoxの中にあるFlowDocumentだっけか、
あれにパネルとか突っ込んで見たんだけど、どうもスクロールバー自体がテキスト扱いになって操作できないし。

460:デフォルトの名無しさん
09/03/14 15:06:30
>>458
URLリンク(msdn.microsoft.com)
> RichTextBox ではテキストが常に折り返されます。
> テキストの折り返しが不要な場合は、FlowDocument の PageWidth を RichTextBox の幅より大きく設定します。
> ただし、この場合も、ページの幅に達するとテキストが折り返されます。
なので、
<RichTextBox><FlowDocument PageWidth="300"/></RichTextBox>
<RichTextBox><FlowDocument MinPageWidth="680" MaxPageWidth="1024"/></RichTextBox>
みたいに、適当に大きな幅を入れておくとか。
ただ、横スクロールバーを表示すると、最初からスクロールできる状態になってしまうのが難点だけど。
後は、イベントで動的に幅を測定して FlowDocument.PageWidth に反映させるとか。

461:458
09/03/14 23:04:06
>>459
色つけたかったんで、TextBoxじゃだめなのよ

>>460
ありがとう。助かったぜ。

462:デフォルトの名無しさん
09/03/15 00:28:01
WCFおもしろいな。しかしスレはない

463:デフォルトの名無しさん
09/03/15 01:17:46
>>462
Webサービス プログラミング総合スレッド
スレリンク(tech板)

464:デフォルトの名無しさん
09/03/15 01:38:18
>>462
特に旧来のWindowsForms、これからのスタンダードなWPF、XBAP、Silverlight、そして携帯電話や汎用
ブラウザ向けのASP.NETなんかで相互に共用できるアプリケーションシステムの構築となると、
やっぱりWCFは欠かせないよね。

俺の場合、データ・レイヤはSQL Server、アプリケーション・レイヤは機能・役割ごとに複数個のWCFで構築。
プレゼンテーション・レイヤは、WinForm、WPF、XBAP、Silverlight、Javaでマルチクライアント環境を実現。
今はこの基本3層構成をWebサービスのマイブームと位置付けて色々と遊んでいる。

465:デフォルトの名無しさん
09/03/15 13:16:46
重要度的には Silverlight>WPF>XBAP な希ガス。

466:デフォルトの名無しさん
09/03/15 13:34:46
>>465
XBAPはSilverlightへの発展的解消で完全に進化が止まっちゃったからね。
Silverlightは資料もチュートリアルも豊富。WPFとの2本立てで決まりだね。

そういえば、MIX'09でSilverlight 3の発表ですな。
ブラウザナビゲーションとの連携が目玉らしいけど、それよりTextBox上での
右クリック時にコピペ系のコンテキストメニューを出すようにして欲しいな。

467:デフォルトの名無しさん
09/03/15 13:46:59
もうSliverlight3の発表ですか、これは楽しみ。
ついでにBlendも改善バージョンを発表してもらいたいですね。

468:デフォルトの名無しさん
09/03/16 02:29:08
Silverlightで書かれたサイトって一発でわかる?

469:デフォルトの名無しさん
09/03/17 00:29:03
インストールを強制されるからね

470:デフォルトの名無しさん
09/03/17 18:36:56
C#でXPSドキュメントを弄っているけど、これって面白いな。

XpsDocument NewXpsDoc = new XpsDocument("D:\\AAAA.XPS", FileAccess.ReadWrite);
XpsDocumentWriter XpsDocWrtr = XpsDocument.CreateXpsDocumentWriter(NewXpsDoc);
XpsDocWrtr.Write((Visual)this);
NewXpsDoc.Close();

たったこれだけでWindowと配下のコントロールすべてを含むXPSドキュメントが生成されて
D:\AAAA.XPS に出力された。
VS2008かExpression Blendを使ってXAMLでサクッと注文書などの伝票フォーマットのひな形の
Windowを書いて、LINQでDBやXMLをバインディングさせてやれば、カンタンに自社ロゴ入りの
伝票なんかをXPSで出力できるな。
もうCrystalReportやQuickReport、サードパーティーのPDF帳票コンポーネントなんて不要だね。

さらにバーコードコントロールも .NET 4.0で標準搭載してくれれば・・・

471:デフォルトの名無しさん
09/03/19 03:50:47
でもC#のプログラムって商用にしにくいよね
割と簡単にソースを推論できるから

472:デフォルトの名無しさん
09/03/19 04:25:53
>>471
情報システム系の業務アプリには向いているよ。
オンライン販売やパッケージ販売のソフトウェア制作には向かないかも。

商用≠開発したソフトウェアの製品マスターのコピーを販売する
商用=商用の設備・ツールとしてソフトウェアを稼動させる

473:デフォルトの名無しさん
09/03/19 07:17:14
難読化してありゃ十分じゃね?
客先で難読化されてた奴見たけど中身を見る手間相当あがると思うけど。

動作のわかる所からクラス機能を推論して意味通る名前を当てはめるにしても全体の把握は大変そう。
一部のロジックがわかれば良くてそこだけピンポイントで調べるのには向かなそうだが。

474:デフォルトの名無しさん
09/03/19 07:21:40
VisualStudioに組み込んでくれないかな
難読化

475:デフォルトの名無しさん
09/03/19 11:06:32
商用というかメーカー製PCのバンドルソフトでも.NET利用がちらほら見かけるようになったが、
大抵ネイティブモジュールとのハイブリットだしな。

476:デフォルトの名無しさん
09/03/19 14:52:32
ネイティブと混ぜたらネイティブ部分はちゃんとブラックボックス化するのか?
あと自作したlibやdllを混ぜたらリコンパイルきかないだろう
さすがに機械コードを読んで作るやつはいるわけないし

477:デフォルトの名無しさん
09/03/19 15:34:17
GUIだけ.NETって感じ?

478:デフォルトの名無しさん
09/03/19 15:56:36
C++で書いてあるコードでも、UI部分のように、そのほとんどがAPIコールのものは解読は容易。
だいいち、そんなに解読されて困るコアのアルゴリズムがあるんだったら、それはサービス化
してSaaSで提供するとか考えるべき。

479:デフォルトの名無しさん
09/03/19 21:20:25
tabControlのタブに画像を表示させるのはどうすれば良いのですか。
このアプリのようにしたいのですが。
URLリンク(tmpgenc.pegasys-inc.com)

480:デフォルトの名無しさん
09/03/19 21:29:45
ItemTemplateプロパティで

481:デフォルトの名無しさん
09/03/19 21:40:39
>>479
TabItem.Header に Image を指定する。

<TabControl>
  <TabItem>
    <TabItem.Header>
      <Image Source="example.jpg" Stretch="None"/>
    </TabItem.Header>
    ....
  </TabItem>
  ....
</TabControl>

482:デフォルトの名無しさん
09/03/20 07:25:57
481>>
ありがとうございます。
「ファイル example.jpg はプロジェクトの一部ではないか、'Build Action' プロパティが 'Resource' に設定されていません。」
となります。Resource設定はどのように行うのでしょうか。




483:デフォルトの名無しさん
09/03/20 11:30:12
>>482
Visual Studio を使っているなら、
プロジェクトを右クリック->追加->既存の項目...->イメージ ファイル->example.jpg。
ビルドアションの変更する場合は、
プロジェクトに追加したファイルを右クリック->プロパティ->ビルド アクション。

詳しくは、ここを参照。
Windows Presentation Foundation アプリケーションのリソース、コンテンツ、およびデータ ファイル
URLリンク(msdn.microsoft.com)

484:デフォルトの名無しさん
09/03/20 20:48:14
WPFの窓の中にopenglで描画したり,WPFの窓をC++で使うことは出来ますか?

485:デフォルトの名無しさん
09/03/20 21:12:32
>>484
とりあえずここを読んでみては?

WPF 移行と相互運用性 - MSDN
URLリンク(msdn.microsoft.com)

486:デフォルトの名無しさん
09/03/20 21:18:12
WPFは4.0でよくなるのかなー
Form,Silverlight,WPFどれがどうつかわれてくのかいまいちさきがみえん。
Silverlight3.0とかかなりよさげで環境を問わないWeb,デスクトップ含めたUIフレームワークとしてかなり有望そうだが。

487:デフォルトの名無しさん
09/03/20 21:46:10
>>485 読んでみます

488:デフォルトの名無しさん
09/03/20 23:24:43
機能もだが、XPで4.0がサポートされるのかどうか不安だ。
グラフィック関係の新規APIはほとんどVista以降のみ対応だからなあ。

489:デフォルトの名無しさん
09/03/21 03:38:28
SGMLは<tag> </tag>ではなく[tag][/tag]にすべきだった
<>入力するときにShiftがめんどくさいです><

490:デフォルトの名無しさん
09/03/21 08:04:07
>>483
ありがとうございます。できました。

491:デフォルトの名無しさん
09/03/21 09:30:52
WPFって時期尚早と思わない?
初心者が取っ付くには敷居が高すぎる。
ウインドウズフォームとちがって単純に貼り付けて
プロパティを操作するだけではだめだ。

インテリセンスも効かないXAMLファイルを操作しなくては
ならないし。

492:デフォルトの名無しさん
09/03/21 12:28:12
時期尚早だよ。だからこそ楽しい。

493:デフォルトの名無しさん
09/03/21 14:00:00
そういうこと。F#もいい。

494:デフォルトの名無しさん
09/03/21 14:23:11
少なくとも生産性は低いな

495:デフォルトの名無しさん
09/03/21 14:40:02
>>491
俺はC#だけで書いてる

496:デフォルトの名無しさん
09/03/21 15:06:20
確かWPFってデュアルコア6GHz時代を想定して作ったんじゃなかったっけ?

497:デフォルトの名無しさん
09/03/21 15:33:44
どう考えても、XAML + C# の方が生産性が高くないか?

498:デフォルトの名無しさん
09/03/21 15:37:54
WinFormよりXAML+WPFの法がよほど効率的だな。

499:デフォルトの名無しさん
09/03/21 15:59:55
DataGridViewさえ充実していれば…

500:デフォルトの名無しさん
09/03/21 16:01:15
次期バージョンを待て

501:デフォルトの名無しさん
09/03/21 17:56:52
>>497
>>498
何を持ってそう言える???

502:デフォルトの名無しさん
09/03/21 21:17:12
生産性を高くするためのフレームワークなんだから、低かったら使う意味ないじゃん。

503:デフォルトの名無しさん
09/03/21 23:55:26
XAMLでUIの階層分けを意識して記述できるし、
アニメーションさせなきゃならない部分があっても気軽に書ける。

504:デフォルトの名無しさん
09/03/22 00:06:30
WinFormsはデザイナでコントロールの親子関係を変更するのが面倒だったな

その点、WPFはXAMLを少し書き換えるだけなので楽だ

505:デフォルトの名無しさん
09/03/22 00:09:13
ポトペタ以上のことやろうとしたらWinFormsは簡単に破綻するでしょ。


506:デフォルトの名無しさん
09/03/22 00:59:04
XAMLはコントロールの親子関係もプロパティもすべて一覧で把握できる。

507:デフォルトの名無しさん
09/03/22 01:02:31
UIの柔軟性とソースでの視認性の双方のバランスがいいよなXAMLは
これに関してはWinFormとは段違いでいいと思う

508:デフォルトの名無しさん
09/03/22 01:12:50
>>501涙目

509:デフォルトの名無しさん
09/03/22 01:26:51
C#とxamlとで相互変換できるならVSでボタン一つで切り替えるようになるといい
それぞれのいい所取りできれば最高

510:デフォルトの名無しさん
09/03/22 01:45:40
C#の利点(リファクタリングとか)がXAMLでも完璧に使えたらとは思うが、
そのアプローチには無理があるだろう

XAML→C#は可能だろうけど、
C#→XAMLはC#のコードがXAMLに埋め込まれる事になりそう

511:デフォルトの名無しさん
09/03/22 02:10:37
>C#→XAMLはC#のコードがXAMLに埋め込まれる事になりそう
これに関してはマイクロソフト様より「技術的には可能だが非推奨」という
実務ガイドラインの見解を戴いております。

512:デフォルトの名無しさん
09/03/22 11:54:50
コードが埋め込まれたとしても、そんなところには見向きもしないでxamlで見やすいところだけ編集するんだから無問題

513:デフォルトの名無しさん
09/03/23 15:22:18
WPF Toolkit が更新されてるね。
DataGrid, DatePicker, Calendar のバグが修正されたみたい。

WPF Toolkit - March 2009 Release
URLリンク(wpf.codeplex.com)

URLリンク(blogs.wankuma.com)
↑のスクロールで列の表示が崩れるバグもしっかり修正されてたよ。

514:デフォルトの名無しさん
09/03/24 20:22:05
XAML編集でちゃんとインテリセンスが効けばいいんだけどねえ。
この辺もVS2010で改善されるのかなあ……

515:デフォルトの名無しさん
09/03/24 20:28:48
>>514
{Binding }にもインテリセンス効くようになるらしいよ
エディタも十分高機能化するそうだけど

516:デフォルトの名無しさん
09/03/25 03:46:02
VS2008でその水準に達していなかったのが最大の失策

517:デフォルトの名無しさん
09/03/25 11:40:19
>>515
>{Binding }にもインテリセンス効くようになるらしいよ
これはかなり嬉しい。
そういや、WPF Toolkitも標準で入るとか聞いたが…。

518:デフォルトの名無しさん
09/03/25 19:05:20
Windowsライクな外観を作りにくい


最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch