トップページtech
1001コメント292KB

WPF(XAML, XBAP, .NET4.0)GUIプログラミング Part7

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2010/08/22(日) 21:11:53
一向に普及しないユーザーインターフェースシステム
Windows Presentation Frameworkについて語るスレ。
パワフルで柔軟すぎるのが敗因か? 正直ついていけないよね…。

Visual Studio 2010
ttp://www.microsoft.com/japan/msdn/vstudio/
Microsoft .NET Framework 4 (Web インストーラー)
http://www.microsoft.com/downloads/details.aspx?familyid=9CFB2D51-5FF4-4491-B0E5-B386F32C0992&displaylang=ja
Microsoft .NET Framework 4 (スタンドアロンインストーラー)
http://www.microsoft.com/downloads/details.aspx?familyid=0A391ABD-25C1-4FC0-919F-B21F31AB88B7&displaylang=ja

関連スレ
Microsoft Silverlight その6
ttp://pc12.2ch.net/test/read.cgi/tech/1271580489/

過去スレ
WPF(XAML, XBAP, .NET4.0)GUIプログラミング Part6
http://hibari.2ch.net/test/read.cgi/tech/1274423236/
WPF(XAML, XBAP, .Net3.5)GUIプログラミング Part5
http://pc12.2ch.net/test/read.cgi/tech/1261879110/
WPF(XAML,XBAP,.NET3.5)GUIプログラミング Part3
ttp://pc12.2ch.net/test/read.cgi/tech/1245384489/
WPF(XAML,XBAP,.NET3.5)GUIプログラミング Part3
ttp://pc12.2ch.net/test/read.cgi/tech/1231506876/
WPF(XAML,XBAP,.NET3.5)GUIプログラミング
ttp://pc11.2ch.net/test/read.cgi/tech/1211453941/
【新GUI FW】WPF(XAML,AVALON,.NET3.0)【重い?】
ttp://pc11.2ch.net/test/read.cgi/tech/1162950198/

コードを貼る場合は以下のサイトの利用をお勧め。
run codeのチェックは外しておきましょう。
http://ideone.com/
0233デフォルトの名無しさん2010/10/28(木) 23:53:33
>J2EE
いや、それは無いだろう…
0234デフォルトの名無しさん2010/10/29(金) 00:17:40
J2EE使うならWin選択する理由がねえ
0235デフォルトの名無しさん2010/10/29(金) 01:43:16
>>230
WPF は CPU じゃなくて GPU 依存だしね。
あと、Vista か 7 なら軽い。

>>231
Silverlight は GPU の活用度合が低い感じが。
クロスプラットフォームだからある程度仕方がなく。

>>232
いつもの、「MS 製品は3世代目から」ジンクスに従えば、ようやく正式版。
0236デフォルトの名無しさん2010/10/29(金) 01:55:24
>>234
社会じゃ仕方なくWin縛りの案件ばかりなんだよ、僕。
0237デフォルトの名無しさん2010/10/29(金) 18:50:10
>>209
これのGUIって自作なのかな
0238デフォルトの名無しさん2010/10/29(金) 18:54:45
社外品だろ
早くなったのは起動だけ
他は、、まぁわかるよな
0239sage2010/10/29(金) 19:00:59
ビジネス用途での"Windows XP"シェアは全体の75%だからな、
さらに2014年まで使えるから、
あと2,3年はビジネス用途に絡むソフトにはWPFは鬼門かもしれんね
0240デフォルトの名無しさん2010/10/29(金) 19:11:55
EvernoteのおかげでWPFの普及がさらに遅れそうだな
0241デフォルトの名無しさん2010/10/29(金) 20:26:37
正直WPF使ってΣ( ゚Д゚) スッ、スゲー!!ってもんをみたことがない・・・
ほかのFWでもあまり見たことないがw
0242デフォルトの名無しさん2010/10/30(土) 07:23:20
cocoa売ってもらえばいいんだよなw
まあそれはなさそうだからwpf使うけど
0243デフォルトの名無しさん2010/10/30(土) 10:09:16
>>241
スゲー!と思わせてもどうせ2分で慣れる。
重要なのはWhat the fuckの少ない、驚き最小化の原則に乗った動作。
すなわちUIの良し悪しはフレームワークに依らない。

WPFを使うと微妙な挙動が多くてその実現に無駄に手間がかかるがなw
0244デフォルトの名無しさん2010/10/30(土) 10:16:58
>242
いや別にcocoaはいーやw

>243
いやLonghornのデモの時とかなんか色々すごいUIデモしてたような気がしたんだが…
まぁそれが使いやすいかどうかは別物だけど.
0245デフォルトの名無しさん2010/10/30(土) 10:26:36
単にすごければいいだけであれば、
ほとんどXAMLだけでアニメーションゴリゴリで動くものを作ることもできるさ。
限度を越えるとウザいだけだがなw
0246デフォルトの名無しさん2010/10/30(土) 11:56:12
Windows Media Center みたいな奴か。
0247デフォルトの名無しさん2010/10/31(日) 18:53:52
ひょっとしてWPFのWebBrowserってウンコ?
0248デフォルトの名無しさん2010/10/31(日) 18:59:51
ウンコもクソもIEコントロールホストしてラップしてるだけだもん
WPFのWebBrowserと呼ぶほどのものでもない
0249デフォルトの名無しさん2010/10/31(日) 22:17:37
>>247
WebBrowserだけでなくどれもがウンコだろが
0250デフォルトの名無しさん2010/10/31(日) 22:48:37
WebBrowserはWPFですらないのでTransformなども受け付けなくて残念だったんだよなぁ。
0251デフォルトの名無しさん2010/10/31(日) 22:56:36
NewWindowイベとStatusTextがホスィ
0252デフォルトの名無しさん2010/10/31(日) 23:23:45
SilverlightだとエフェクトかけたりできるのはもちろんWebBrowserBrushとかあるんだよな
0253デフォルトの名無しさん2010/11/01(月) 03:36:43
一方 firefox は Direct2D を選択した…!?
0254デフォルトの名無しさん2010/11/01(月) 09:01:54
WPFで開発するプログラムって具体的にどんなものが多いの?
0255デフォルトの名無しさん2010/11/01(月) 09:29:04
VC#2010Expr使ってて、WPFのプロパティウィンドウで値を変更しようとしたら、いつも勝手に日本語入力になるんだけど…
0256デフォルトの名無しさん2010/11/01(月) 12:58:36
【MS】Silverlight終了のお知らせ。今後はHTML5に注力。
ttp://hato.2ch.net/test/read.cgi/news/1288568171/
0257デフォルトの名無しさん2010/11/01(月) 13:07:16
WPFたん・・・orz
0258デフォルトの名無しさん2010/11/01(月) 13:33:46
ARPANET大勝利
0259デフォルトの名無しさん2010/11/01(月) 15:25:38
>>254
Visual Studio 2010 みたいなものです。
0260デフォルトの名無しさん2010/11/01(月) 16:47:18
WPFはまだ終わらんさ。Windowsアプリ開発の標準として揺ぎ無い地位を得るはずだ!はずだっ!
0261デフォルトの名無しさん2010/11/01(月) 17:16:42
wp7はsilverlightなんだし別に死亡じゃなくね?
0262デフォルトの名無しさん2010/11/01(月) 21:59:54
Windows Phone 自体が死んでいる
0263デフォルトの名無しさん2010/11/01(月) 22:03:56
WPF、Silverlightともに糸冬了
http://www.publickey1.jp/blog/10/html5silverlightwindows_phone_7.html
0264デフォルトの名無しさん2010/11/01(月) 22:06:32
3.5で作ったサンプルクラスのお手軽ソフトが4でビルドできない。

そして私はWPFを考えるのをやめた。
0265デフォルトの名無しさん2010/11/01(月) 22:08:34
次世代GUIまだ〜? (・∀・)
0266デフォルトの名無しさん2010/11/01(月) 22:27:17
Visual Studio 2012ではWPFのテンプレートは非標準。代わりにHTML5がメインとなりスマートクライアント時代も終息かと。
0267デフォルトの名無しさん2010/11/01(月) 22:30:45
ウソニュースだしな。
0268デフォルトの名無しさん2010/11/01(月) 23:00:06
>>264
それ4じゃなくて4 Client Profileとかじゃね?
0269デフォルトの名無しさん2010/11/01(月) 23:28:02
4 ⊃ 4 CP
0270デフォルトの名無しさん2010/11/01(月) 23:47:49
WinForm開発中止で、WPFを捨てたら…どこに行くんだよw
0271デフォルトの名無しさん2010/11/02(火) 00:11:57
WinFormsの方はそのまま4CPに移行成功した
WinForms安定だな
サクサク起動するようになったし侮れないな
0272デフォルトの名無しさん2010/11/02(火) 08:40:09
すると MDX2.0 returns がやってくるのか…
0273デフォルトの名無しさん2010/11/02(火) 15:45:51
>>264
どんだけ変な書き方してるんだよ
0274デフォルトの名無しさん2010/11/02(火) 15:58:45
どうせ非推奨APIを使用してて、コンパイルスイッチでエラーになる設定なんだろw
0275デフォルトの名無しさん2010/11/02(火) 20:18:17
// ResourceDictionary.xaml を作って、
<Style TargetType="Button" x:Key="abc">〜</Style>

// App全体に適用でおっけー、と App.xaml で
<Application.Resource>
 <ResourceDictionary Source="ResourceDictionary.xaml" />
</Application.Resource>

// しかし、UserControl.xaml 等からは見えてないわけで
<Button Style="{StaticResource abc}">〜</Button>

これが 「リソース "abc" を解決できません」 警告。
更に、このUserControlを使っているWindow.xamlでは
「"〜"のインスタンスを作成できません」エラー。
(デザイナを開かなければ起動できるし意図通り反映もされてる…)


今は各xaml全部に <ResourceDictionary Source="ResourceDictionary.xaml" /> と書いてますが
「App全体に適用でおっけー」を上手くやる方法はありますか。
0276デフォルトの名無しさん2010/11/02(火) 21:10:11
VSが古くない?
0277デフォルトの名無しさん2010/11/02(火) 21:36:53
>>275
同じことをしてみたけど、うちでは警告でなかったし、デザイナにも反映されたよ。

.NET Framework 4 Client Profile
Visual Studio 2010 Version 10.0.30319.1 RTMRel
+ Hotfix for Microsoft Visual Studio 2010 Professional - 日本語 (KB982218)
0278デフォルトの名無しさん2010/11/02(火) 21:54:05
ナンダッテー
VS2010Expressです。
ちょっと新しく作って最初から試してみます。
0279デフォルトの名無しさん2010/11/02(火) 22:14:57
わかった。
Srcフォルダを作って、そこにxamlとcsを全部入れてたんだけど、それだとダメみたい。
普通にプロジェクトフォルダ内なら大丈夫でした。
詳しいことはわかりませんが、参照の基準の場所?みたいのがあるんでしょうか。

試していただいてありがとうございました。
0280デフォルトの名無しさん2010/11/02(火) 22:20:45
ResourceDirextory.xamlがプロジェクトに追加されてないんじゃ
0281デフォルトの名無しさん2010/11/02(火) 22:30:40
いやー、ソリューションエクスプローラーから
右クリック 追加 新しいフォルダー、ドラッグでどぼどぼ移動、
ってやったので、プロジェクトは大丈夫だとおもいまっす。
(プロジェクトから除外してみたら例外ですた)
0282デフォルトの名無しさん2010/11/02(火) 23:18:51
WPFのTextBoxコントロールって右クリックしたときになんか変なメニューでるね。
なんで今までと同じにしないのか理解できない。
IME使わない国には分からないのかな。
0283デフォルトの名無しさん2010/11/03(水) 00:09:46
OS依存のコンテキストメニューを、自前実装のWPFがわざわざエミュレートするようなことはしない。他のコントロールもそうだろ。
0284デフォルトの名無しさん2010/11/03(水) 00:12:39
Windows以外で誰が使うんだよ
夢見すぎだ
現実に戻ってこい
0285デフォルトの名無しさん2010/11/03(水) 00:45:22
とりあえず、APIつーかネイティブな場合、どのようにしてコンテキストメニューが表示されているか知れば答えがわかるよ。
それを知っていれば、君はおかしな事を言っていた事に気づくはず。
0286デフォルトの名無しさん2010/11/03(水) 01:01:33
技術面でこうだから出来ないというのは三流の言うこと。
ユーザーの実態に合わせないからWPFはこうなった。
どうやら未来もなさそうだ。
0287デフォルトの名無しさん2010/11/03(水) 01:13:21
やっべ、WPF作った人三流らしいぜ
0288デフォルトの名無しさん2010/11/03(水) 01:54:24
>>286
自分こそが三流だと思えないとこが三流の三流たる所以
0289デフォルトの名無しさん2010/11/03(水) 02:12:26
TextBox のデフォルトコンテキストメニューに何で「すべて選択」が無いんだろ?
Ctrl+A で「すべて選択」は出来るから、キーバインドはされている。
なんか理由があるのかな?
0290デフォルトの名無しさん2010/11/03(水) 02:22:58
>>289
一流の仕事なんだから間違いない。
三流は黙っとけ。
0291デフォルトの名無しさん2010/11/03(水) 02:31:02
>>286
自分でどうにかしたらいいじゃないか。
技術的に無理か?
0292デフォルトの名無しさん2010/11/03(水) 02:37:43
Linuxがなぜ一般家庭まで普及しなかったのかを感がる時期に来ているね。
0293デフォルトの名無しさん2010/11/03(水) 02:40:11
一般家庭レベルならしょうがないな
0294デフォルトの名無しさん2010/11/03(水) 02:55:58
WPFなんだからApplicationあたりのリソースに
TextBoxのスタイルのContextMenuに満足のいくContextMenuを設定しておけよ。
もともとTextBoxのメニューなんてあんまり統一されてなかったと思うよ。
0295デフォルトの名無しさん2010/11/03(水) 08:31:05
TreeViewのイベントが複数回発生するのは仕様ですか?
0296デフォルトの名無しさん2010/11/03(水) 09:13:31
仕様です
0297デフォルトの名無しさん2010/11/03(水) 13:00:29
一億総三流時代
0298デフォルトの名無しさん2010/11/03(水) 19:05:34
このスレにあったような。
あった >>23-28
0299デフォルトの名無しさん2010/11/04(木) 21:37:50
MainWindowから Showするのに時間のかかるSubWindowを
非同期で表示するにはどうしたらよいのか、お教えください。


private void button1_Click(object sender, RoutedEventArgs e)

  Dispatcher.BeginInvoke(DispatcherPriority.Background, new Action(ShowSub));
}

private void ShowSub()
{
  SubWindow sub = new SubWindow();
  Thread.Sleep(3000);

  sub.Show();
}

こんなコードで実行すると、実行完了まで、MainWindowの操作ができなくなってしまっています。
Dispatcherの使い方が間違っているんだろう…というくらいまでは分かるのですが
それ以上わからず手じまいになってしまっています。
0300デフォルトの名無しさん2010/11/04(木) 21:48:50
無理
SubWindowのロード処理が重いなら、とりあえず表示だけ済ませて
重いロード処理は非同期にするべき
0301デフォルトの名無しさん2010/11/04(木) 21:50:08
>>299
DispatcherにInvokeを送る=UIスレッドで実行する=時間のかかる処理はフリーズしてしまう
のです。
DispatcherPriorityを設定したからって違うスレッドで実行されるわけではないです。
フリーズしないようにするためには別のスレッドで実行するといい。
例えばThreadPool.QueueUserWorkItemとか。
でも、別のスレッドからだとUIスレッドのコントロールに触ると例外が出てしまう。
そこで使うのがDispatcher.BeginInvokeで、UIスレッドにメソッドを送りつけるわけです。
0302デフォルトの名無しさん2010/11/04(木) 21:52:12
あきらめてSplash Windowをだしてごまかすとか。
WPFは簡単に出来たはず。
0303デフォルトの名無しさん2010/11/04(木) 22:07:53
>>300-302

即答ありがとうございました。

ThreadPool.QueueUserWorkItemでは STAスレッドではないということで
InvalidOperationExceptionが発生するということは
ググったり、自身で実行してみて理解していました。

自身に配置したコントロール(たとえばListBoxやTextBox)に対して
Dispatcher.BeginInvokeで非同期実行することはできていたので
Windowではなぜできないのか、悩んでおりました。

無理、という事が判明したのなら
アドバイス通り、スプラッシュやらプログレスの表示で回避するのが良策のようですね。
0304デフォルトの名無しさん2010/11/04(木) 22:33:40
>>303
非同期にやるっつったって、Dispatcher.Invoke の中で重たい処理しちゃいけないのはわかってる?

非同期開始
重たい処理
Dispatcher.Invoke
Window生成&Show

って順でやらないとダメ。
0305デフォルトの名無しさん2010/11/04(木) 22:57:39
ユーザーの文字入力でその文字のボタンを作成していくものを作ろうと思うのだけど
ボタンの作成はXAMLでするの?C#で記述するの?
0306デフォルトの名無しさん2010/11/04(木) 23:02:29
XAMLでスタイル書いといてC#でボタン作ってスタイル突っ込む
0307デフォルトの名無しさん2010/11/04(木) 23:08:55
WPFがもっとも苦手とする部分だな
0308デフォルトの名無しさん2010/11/04(木) 23:14:45
ボタンを追加?
データバインディングで Button.Content にテキストをバインドとかでなく?

動的に追加なら普通に C# で書くね。
0309デフォルトの名無しさん2010/11/04(木) 23:19:43
>>215
昔からそうだね
0310デフォルトの名無しさん2010/11/04(木) 23:22:54
>>306
スタイルとかよくわからないですがそれでやってみます

>>307
そうなんですか、まだXAMLでどこまでできるかよく把握していないので
ロジック分離するにも境界線がわかっていない感じです

>>308
動的なのかわかりませんが、ラップパネルにユーザーが文字を入力して作成ボタンを押すと
その文字が書かれたボタンが新しく追加されていくという感じです
0311デフォルトの名無しさん2010/11/04(木) 23:27:25
>>309は誤爆ですw
0312デフォルトの名無しさん2010/11/04(木) 23:29:05
>>310
そういう用途なら ↓こんな感じでやる。

XAML 側
<ItemsControl ItemsSource="{Binding List}">
  テンプレートで
  <Button Content="{Binding}" />

C# 側(どこかで DataContext 設定)
View.DataContext = new ViewModel();

C# 側(ViewModel クラスで)
class ViewModel
{
  public ObservableCollection<string> { get; set; }
}
0313デフォルトの名無しさん2010/11/04(木) 23:29:46
>>307
WPF で余裕。
データバインディングと ItemTemplate 強力。
03143052010/11/04(木) 23:37:06
>>312
わざわざありがとうございます
覚えなければいけないことがいろいろあるようで
根気よくやってみます
03153052010/11/05(金) 19:08:31
>>312
もう少しだけ細かく教えてもらえませんか?
ラップパネルにはItemsSourceもControlTemplateもないのですがどこのテンプレートですか?
それと作成ボタンが押されたらラップパネルにボタンが追加されるようにする方法もよくわかりません
Binding Listも何をバインディングしているのかもわかりませんでした
ViewModelクラスも何のために作成しているかわかりませんでした

一応こんな風にC#で作成ボタンのクリックイベントでボタンを作成するようにしてできましたが

        private void button1_Click(object sender, RoutedEventArgs e)
        {
            Button button1 = new Button();
            button1.Content = textBox1.Text;
            button1.Background = new SolidColorBrush(Colors.White);
            button1.Foreground = new SolidColorBrush(Colors.DarkGreen);
            this.wrapPanel1.Children.Add(button1);
         }
0316デフォルトの名無しさん2010/11/05(金) 19:38:02
> ラップパネルにはItemsSourceもControlTemplateもないのですがどこのテンプレートですか?
WrapPanelは直接じゃなくてItemsControlのItemsPanelTemplateとして使う
で、この場合のテンプレートはItemsControl.ItemTemplate

> それと作成ボタンが押されたらラップパネルにボタンが追加されるようにする方法もよくわかりません
考え方が違う

A. 自分でやること
・ItemsControl,ItemsControlにObservableCollectionをバインドしておく
・必要なときにObservableCollectionに文字列を追加する

B. 勝手にされること
・ObservableCollectionはデータが追加されたことをItemsControlに通知する
・ItemsControlは増えたデータをDataTemplateをもとに作り上げた要素(ボタン)を自分に追加する
0317デフォルトの名無しさん2010/11/05(金) 20:33:41
>>316
http://ufcpp.net/misc/WpfApplication5.zip
03183052010/11/05(金) 21:07:11
>>316
>>317
わざわざ作って頂いてありがとうございます
でもデリゲートいっぱい、ソースみても何を書いているのかよくわかりませんでした
それと起動しても追加ボタンが灰色のままで押せないのですが

今の自分にはレベルが高すぎる上、なぜこうすべきかもわからないので>>315のやり方でとりあえず妥協します
0319デフォルトの名無しさん2010/11/05(金) 21:08:47
>>315
コード中でボタン作るのはともかく、コードにColor.DarkGreenとか出てくるのはちょっといただけない
せめてStyle使いましょう
0320デフォルトの名無しさん2010/11/05(金) 21:08:51
>>318
おいこらw、セッカクつくってもらったんだから妥協してんしゃねえよ。
つかてめえデリゲートごときでなにびびってんだコラ。
0321デフォルトの名無しさん2010/11/05(金) 21:10:37
はは、まぁ作った奴からすればちょっと悲しいよなw
0322デフォルトの名無しさん2010/11/05(金) 21:11:15
柄の悪いインタネッツですね
0323デフォルトの名無しさん2010/11/05(金) 21:11:27
デリケートは昔でいうgotoだから使う奴は初級者
0324デフォルトの名無しさん2010/11/05(金) 21:12:10
昔で言うgotoは例外ですよ
03253052010/11/05(金) 21:23:47
>>319
本当はスタイルしたいんだけど
C# コードでのstyleを作る方法が見つからなかった
XAMLでのコードはあったけど
でも、C#側で作ったボタンにXAML側で作ったスタイルを適用する
方法もわからなかったので

>>320
デリゲートはずっと避けてきてそれでもwinformsならそれなりのツールが
作れていたので、まった無知です
0326デフォルトの名無しさん2010/11/05(金) 21:26:02
ParallelsとかTaskとかデリゲートだらけに進化してます
0327デフォルトの名無しさん2010/11/05(金) 21:26:54
>>318
データはビューから分離しとかないと、すぐに管理しきれなくなるよ。

ほんとにボタン足して終わりの単純なアプリなら >>315 で全然いいんだけど。
0328デフォルトの名無しさん2010/11/05(金) 21:29:33
>>325
リソースで Style 作っておいて、
C# 側からリソース読み出せばいい。

てか、デリゲート避けてきたって、そりゃかなり酷いぞ。
C 言語でポインターが理解できませんと同レベルにどうしようもない。
0329デフォルトの名無しさん2010/11/05(金) 21:30:30
わからなきゃ投げ出すとか、ほんとゆとりだな
0330デフォルトの名無しさん2010/11/05(金) 21:34:17
デレゲートとラムダ式の違いがよくわからんかったな
0331デフォルトの名無しさん2010/11/05(金) 21:38:18
デリゲートね
デリゲートを簡単に書くためにラムダ式が
03323052010/11/05(金) 21:38:22
>>327
最終的には、追加されたボタンをクリックして色反転
DATAGRIDに並べられたファイルにボタン名(タグみたいな感じ)で関連付けして
xmlで書き出して保存までやりたいです




>>328
> >>325
> リソースで Style 作っておいて、
これはできます
> C# 側からリソース読み出せばいい。
これがわかりません

> てか、デリゲート避けてきたって、そりゃかなり酷いぞ。
> C 言語でポインターが理解できませんと同レベルにどうしようもない。
C言語の例えはよくわかりませんが、デリゲート知らなくても
それなりのソフトはできてました。使う必要がなかった感じです

>>329
投げ出して一生デリゲートを学ばないと言っているわけじゃないので
試行錯誤の過程を断片的に捉えて煽るのはやめてもらえませんかね?
あなたはすぐデリゲート理解できの?
とりあえず、完成まで持っていきたいから他のアプローチを試す
ゆとりというより柔軟と言ってほしい
03333052010/11/05(金) 21:45:41
>>331
簡単に書くというより短く書くだけで
結局、デリゲートがどういうものか理解していないと
よりわかりにくくなっただけって感じ
ラムダ式がなかったころからデリゲートを使っていた人向けで
今から始めた人向けじゃない気がする
■ このスレッドは過去ログ倉庫に格納されています