WPF(XAML,XBAP,.NET3.5)GUIプログラミング Part3
1 :
デフォルトの名無しさん :
2009/01/09(金) 22:14:36
2
Windows 7 beta 入れてみたが、「Windowsの機能の有効化または無効化」を開くと、 「Microsoft .NET Framework 3.5.1」というのがデフォルトで入ってた。3.5 SP1の事か? でも、そのツリーの下にある、 Windows Communication Foundation HTTP Activation Windows Communication Foundation Non-HTTP Activation は入ってなかった。WCFが使えないって事?
WPF製の実用的なソフトってなに?
へぇ、それWPF使ってるんだ
VS2010
Windows 7 x64 のベータ版を入れてみたが、Windows自身のGUIはまだWPFベースにはならないんだな。 Vistaと同様、相変わらずWin32ベースのGUIがそのまま残っていることに驚き。 しかしXP環境の .NET3.5で動かすと異様にモッサリなWPFも、Windows 7の環境だとサクサクだね。 それにVS2008もx64だと速い速い! .NETのパフォーマンス、そしてIIS 5.1/6とIIS 7との機能差も無視できなくなったし、企業も今度こそは Window Server 2008と、Windows 7 に大移動かね。
VS2008はWOWで動いてるんじゃなかったっけ?
つまり、x64 Windeows上では32ビットアプリもサクサク動くということなんだろう。
VSにも64bitとかあったようななかったような・・・
>>5 LoiloScopeもWPFじゃなかったっけか
INotifyPropertyChangedを実装するクラスのプロパティをUIにバインディングしてるんだけど プロパティの変更通知をUIと違うスレッドでしても平気なの? 実験では問題なく動いてるように見えるんだけど、フレームワーク的に想定してるの?
俺は 動く=問題ない と思ってるw でも干渉とかを心配するなら場所を1つに決めて書き直す事を勧める
DispatcherObject.CheckAccess()がインテリセンスに出てこないのはなんでだろう…
DispatcherObjectの全てのメンバには [EditorBrowsable(EditorBrowsableState.Never)]属性が付けられてる DispatcherObjectはWPFの多くのクラスが継承してて,メンバ名も抽象的で コントロールのメンバと混ざるとややこしいから隠してるんじゃね
18 :
デフォルトの名無しさん :2009/01/27(火) 23:51:54
StackPanelでコントロールを並べたいんだが、 ListBoxみたいにItemsSourceを設定する方法はない?
それこそListBoxで並べりゃいいんじゃね?
22 :
デフォルトの名無しさん :2009/01/28(水) 19:50:12
画像に対してテキストの回り込みの方法を教えてほしい。 HTMLならalignとかで出来るけども、回り込み的な表現を行いたい場合の 方法がわからない。 わかる方、教えてほしいです。
2chは日本で一番大きな掲示板だと聞いたのですが WPFって世界で使ってる人5人ぐらいですか?
WPFを作ったチームが5人とは思えないからもう少し多いだろうな。
VS2010を作ってるチームはどんぐらいなんだろう?
そういうことだったのか
マイクロソフトと戦う2010人の開発者たち 〜 Microsoft VS 2010 〜
説得力
WPFにはFlashみたいな画質設定とかないのかな? 瞬間の動作は気分的な問題だから、重くならないように荒くさせてあげたいんだけど。 (だったら瞬間どうさ止めろとかなしでw
31 :
デフォルトの名無しさん :2009/01/28(水) 21:37:35
<Label Content="{Binding Name}" /> 今、こういうふうにラベルで文字を表示してるんだが、 <Label Content="{Binding Foo(Name)}" /> こんな感じで処理してから表示したい。 どうすればいい? Fooを↓みたいに定義すればコンパイル通るんだが文字が表示されなくなった。 public void Foo(string str) { return "foo" + str; }
32 :
31 :2009/01/28(水) 21:38:45
まちがえた。 public string Foo(string str) { return "foo" + str; } こうだな。
IValueConverter使えば?
34 :
31 :2009/01/28(水) 22:00:39
>>33 ありがと。
でもこれで表示されないのはなんで?
そんなバインディングできない! 例外だ例外! あ、例外が出たから空に置き換えときますね
一週間も書き込みなかったのに急に勢いづくWPF恐るべし
エクスプローラで"表示→アイコン"とした時の表示みたいに ・項目は水平に並べられる ・幅に収まらない場合は右端で折り返され、下に伸びていく ・画面に収まらない場合は垂直スクロールバーが表示される という風にしたいのですが、下のようにWrapPanelを使っても折り返されず 右にどんどん伸びていって水平スクロールバーが出てしまいます。 どうすればいいのでしょうか? <ListView Name="listView1"> <ListView.ItemsPanel> <ItemsPanelTemplate> <WrapPanel /> </ItemsPanelTemplate> </ListView.ItemsPanel> </ListView>
38 :
31 :2009/01/29(木) 19:24:22
IValueConverterにコントロール自身を設定することはできない? 変換にはどうしてもコントロールにある情報が必要なんだが。 やりたいこととしては 名前とGUIDが入ったデータの配列があって、 名前をリストで表示したいんだが、 名前が同じでGUIDが違うデータがあったら後のデータを 「〜〜〜(2)」みたいなかんじで表示したい。 てかWPFって難しいな。
>>37 WrapPanelのWidthが指定されてないから無制限に横に広がっちゃう
ViewBaseクラスのサンプルにWrapPanelの例があるよ
>>38 ConverterParameterでパラメータ渡すとか
つかIValueConverterにDictionaryとか持たせればどうとでもなるような気がするけど
40 :
37 :2009/01/29(木) 22:49:52
>>39 ありがとうございます。
<ListView Name="listView1">
<ListView.ItemsPanel>
<ItemsPanelTemplate>
<WrapPanel Width="{Binding ActualWidth, RelativeSource={RelativeSource AncestorType=ScrollContentPresenter, Mode=FindAncestor}}" />
</ItemsPanelTemplate>
</ListView.ItemsPanel>
</ListView>
とすることでできましたが、ScrollContentPresenterというものがどっから出てきたのか分からず
ちょっとすっきりしません。
ListViewとScrollContentPresenterの関係についてはどこに書いてあるのでしょうか?
>>41 Snoopでツリー構造表示はすごく参考になります。
結局そのリンクにあるControlTemplateをカスタマイズする方法にしました。なんかいろいろできそうだし。
ありがとうございました。
<ListView.Template>
<ControlTemplate>
<ScrollViewer HorizontalScrollBarVisibility="Disabled" VerticalScrollBarVisibility="Auto">
<ItemsPresenter />
</ScrollViewer>
</ControlTemplate>
</ListView.Template>
<ListView.ItemsPanel>
<ItemsPanelTemplate>
<WrapPanel />
</ItemsPanelTemplate>
</ListView.ItemsPanel>
来るVS2010ではWPF Toolkitが標準になるそうだけど 今から使ってる香具師はいる?
WPFでリアルタイムにグラフを書かせたいのですが、どうすればいいでしょう? グラフは N分間の受信データをグラフに表示する グラフにはN点で表され、それぞれの点は対応する時間(分)での最終データを表す 毎秒数回データを受信し、その都度グラフに反映する ときどき値域が変化しその都度全体を再描画する こういうものです
普通にタイマーでまわした方が妥当じゃない? 「変わったときに」と指定するなら、タイマーで前回と差が出たら〜にすればいいと思うし、 それに全体をっていうのが引っかかるけど、やっぱ作画した上から瞬間のデータを書いてやるのが一般的。
データの送受信タイミングを受信側が制御するならタイマー データの送受信タイミングを送信側が制御するならコールバック
WPFの入門書はどれがいいでしょう?
ダブルパフィーの超技巧テクニック第2版中国版
「XAMLプログラミング」 Microsoft株式会社 川西裕幸 高橋忍 著 ISBN978-4-7973-3916-1
50 :
デフォルトの名無しさん :2009/01/31(土) 13:05:52
WPFエッセンシャル買ってみたけど、このフレームワークの背景とか 意味とかはふむふむと興味深い点も多かったけど、正直実践にはあまり 役立ちそうにない本だった。
リストビューの要素がダブルクリックされたらコマンドを実行させたくて 下記のようにスタイルを設定しようとしても、InputBindingsにsetアクセサが無いと言われます。 どうやればいいのでしょうか? <ListView.Resources> <Style TargetType="ListViewItem"> <Setter Property="InputBindings"> <Setter.Value> <MouseBinding Command="ApplicationCommands.Open" MouseAction="LeftDoubleClick" /> </Setter.Value> </Setter> </Style> </ListView.Resources>
>50 俺も読んだけど、ことWPFに関して言えば、フレームワークの背景に有る 考え方を知る事の方が重要だと思った。今までとかなり違うからね。
XAML、よいんだがBindingの記述とかなんか直感的じゃないんだよなぁ・・・
確かにエッセンシャルWPFはイマイチだった。 2005年にでたプログラミングWPFのほうがいい。(ベータ版が対象だが)
>>53 そもそも面倒くさいよな。
ちょっとしたことでもコンバータとか書かねばいかんことが多いように見えるし。
思ったのは、頻繁に使う一般的な数値データのバインドなら、たとえばいっそ、
xamlでデータ専用クラスみたいなのを定義できるようにして、
<Data Name="mydata">
<Int Name="d" Enum={ i0,i1,i2 } i0={ value="5" min="0" max="10"} ・・/>
<Double Name="d2" Enum={ D0,D1,D2,D3 } D0={ value="6.2" min="0" max="20.0"} ・・/>
</Data>
(つまり class Mydata { int d[3] ; double d2[4]; } と同義的なクラス。簡単なソフトならそのまま
基本変数をまとめたメインデータクラスとして使ってもいい)
などとして、
コードからは mydata.d[i0]= で値の授受が出来、
コントロールには
<Text Bind="mydata.i0">
で即ok,くらいにしてくれるといいようにも思うのだが。
よくわからんのだが XAMLというのはクラスのメンバの値の設定をマークアップ言語?で記述してる って解釈でいいの? それ以外なにか特徴ある? どこ見てもいきなり文法の説明っぽいのばっかりでいまだに全体像がつかめない
57 :
31 :2009/02/01(日) 00:09:47
<Label> <Binding> <Binding.Converter> <colorful:MyConverter> <colorful:MyConverter.Data> <Binding Path="Data"> <Binding.RelativeSource> <RelativeSource Mode="FindAncestor" AncestorType="{x:Type UserControl}" /> </Binding.RelativeSource> </Binding> </colorful:MyConverter.Data> </colorful:MyConverter> </Binding.Converter> </Binding> </Label> これで実行すると出力に System.Windows.Data Error: 4 : Cannot find source for binding with reference って出て、MyConverter.Dataにも値がセットされてないみたいなんだがなんか原因分かる? 上記の部分はテンプレートの一部なんだが、このテンプレートを使用してるコントロールには 依存プロパティとしてDataが定義されている。
>>56 すっごーく乱暴に言えばHTML/CSS+JavaScriptとXAML+C#/VB.NETで対応する感じ。
>>56 その解釈で合ってるよ。タグ名がクラス名に該当する。
属性がプロパティ
WPF以外のクラスも生成できる
コードを生成してるんじゃなくて実行時にパースしてるんだけどな
新しくウィンドウ作るとデフォでpublic classとして作られるんだけど internalじゃなくてpublicなのは何か理由あるの?
>>51 ItemTemplateの方で記述すべきことじゃね?
>>57 そりゃConverterに先祖は存在しないだろう
WPFのWindowをWindows.FormsのRegionみたいに範囲を指定して穴空けたり削ったりしたいのだけど 対応するプロパティってどれでしょうか? ClipとかVisualClipかなと思ったのだけどうまくいかなくて。
64 :
57 :2009/02/01(日) 06:49:58
>>62 どうすればコントロールの依存プロパティにアクセスできる?
RelativeSourceについていまいち理解できてないんだが
いいサイトないかい?
>>64 やりたいことの大枠は分かったけど実現方法が間違ってる感じがするよ
表現したいデータとUIを説明してくれれば助言できるかもしれない
38だけじゃ抽象的過ぎる
66 :
57 :2009/02/01(日) 13:51:08
>>65 「こんなデータも表現できるのかな」ってのをやってみただけだから
特に何か目的があって作っているわけではないんだ。
過去にC#(非WPF)の仕事で扱ったデータ構造を参考にしたんだが。
だから、多分表現できる、ただ表現の仕方がまずいだけだろうっていってるのよん 目的? 「こんなデータも表現できるのかな」で十分じゃん
つかどうでもいいって思ってるなら聞くなよ
もしかしてWPFってxaml使わなくてもOK? C#だけで書けるんならそのほうがやりやすい気がするんだが xaml使うメリットってなんなの?
XAML使わない方が圧倒的に面倒 試してみた俺が保証する
C#で書くと階層構造作るのが面倒臭すぎる 後で解読不能
XAMLでロジック作労とするとこれがまた面倒なんだよな・・・
混ぜて使うのが普通だろ。 前のスレにXMALなしのサンプルがあったが、アップローダーからは消えてるな。 HTMLをjavascript+DOMで動かすようなもの。
UIとロジックを徹底的に分離しようと意識して書いてみたら結構いい感じになった ような気がする。 BindingとかStyleとかコマンドとか、理解が進むと便利な仕組みだと実感できる。
UIとの分離については、RoutedCommand が重要なポイントだと思う。 C#側でコマンドをずらずら書くところをもうちょっと綺麗にしたいけど。
xamlって、Cocoaでいうnibみたいなもん?
>>70 ,71
C#に対する利点ってどんなところ?
何が書きやすくなるの?
やってみればいいじゃん。 WPFはどっちのやり方も使えるように設計されている。
一回好きなようにXAMLで書いてみて,それをC#で書き直してみたらいい アニメーションとか死ねる
画面の位置、階層構造 XAML>C# ロジックや複雑な関係構築 XAML<C$
どっちもナイス VB
XAMLって言語なんですか? 個別に本を買って勉強した方がいいですか? これやりたくて今C#勉強してるんですけど、道のりは長いですね
>XAMLって言語なんですか? XMLベースの宣言的言語
別にWinFormsのような感覚でやっててもいいわけだし
>>82 XAML は言語といっても HTML みたいなものだから、そんなに難しくはないよ。
見たり書いたりしているうちに、すぐに慣れると思う。
>>85 静的なものはいいんだ
問題はバインド関係
正直リソース系のあの宣言方式はどうにかならんかったのかと
MouseBindingで、(None or Shift or Ctrl or Shift + Ctrl)+左クリックを表すには 4通り全て書く以外方法は無いですか?
そうやってROでくくってやれば1通りの書き方で収まってると思うんだけど?
>>88 ROって何ですか?
<MouseBinding Gesture="LeftClick" Command="Hoge" />
<MouseBinding Gesture="Shift+LeftClick" Command="Hoge" />
<MouseBinding Gesture="Ctrl+LeftClick" Command="Hoge" />
<MouseBinding Gesture="Ctrl+Shift+LeftClick" Command="Hoge" />
Gestureにどう書けばいいんでしょうか?
質問 XAMLの階層構造ってなんですか?
画面の階層構造
92 :
デフォルトの名無しさん :2009/02/03(火) 11:54:59
>>71 そっかなあ。HTMLドキュメントをDOMで操作すること考えたら、
アーキテクチャの設計次第では大したことないと思うが。
第一、いまどきGUIの設計はRADユーティリティ利用が当たり前で、わざわざ
コード書くバカいないだろ。windows formのときにそんなことしてた?
だからそのデザイナが生成するコードがC#じゃなくてXAMLになっただけだよ Designer.csなんてちょっと複雑になると人間が読むのが難しくなるし 必要に応じて修正することもできない
一回デザイナのコードが壊れると、デザイナのウィンドウに ブラウザの「ネットに繋がってません」的なコードを表示するようになる これがコントロール関係でのエラーだと修復はほぼ不可能
XAMLなら言語に依存しない VBだろうとC#だろうとIronPythonだろうと同じデザイナが使える
XAMLはずらっと項目が並んだプロパティウインドウをちまちまクリックするのは面倒くさいだけだと気付かせてくれた点で(作る側的に)UI革命
XAML採用の理由は、半分ぐらいExpression Blend用だろ。
Expression Blendだけ高すぎる・・・ せめてExpression Webくらいの値段にしてくれ
あんなもん売れても無いからそのうちVSに統合されるよ
VS2010で使われるよ
基本XAML無しで追加機能としてXAMLも使えるよ的に出してればもう少し使われたかも。 いきなりUIだけ別言語使えとかハードルが高すぎたんだ。
そもそも今まではUI作るのに開発言語なんか使えなかっただろ いままで通りデザイナで作るのに加えて,オプションとしてXAMLを直接いじることもできるようになった
WPFがココまで使われないとは正直思わなかった。 おそすぎんだよな。きびきび動いてたら色々と使う所も出てきたと思うけれど。 Longhorn時代に出ていた想定アプリケーションはどこへ行った屋ら
>>102 昔だってダイアログはリソーススクリプトで別だったじゃないか。
まあ手書きなんてやらないけど。
>>100 普及させたいならまずExpressionタダにしろよ
108 :
デフォルトの名無しさん :2009/02/03(火) 22:05:36
正直WPFは生産性が低い。 凝ったUIを作りこみたいときには、今までオーナードローなんかで 四苦八苦してたことから考えれば、むちゃくちゃ楽なnだけれど、 そもそも「凝ったUIを作りこみたい」という需要がほとんどないんだと 思う。 意外と便利だなと思ったのは、Expressionのプラグイン作ってみたとき。 UIをWPFのUserControlの形で渡して、INotifyChangeを実装しておくと アプリケーション側でのユーザーの入力が簡単にわかるし、データの やりとりはマネージ型でできるからこれまた簡単。プラグインを指定フォルダ においとくだけでリフレクションで自動的にロードしてくれるのでインスコも 至極便利。 MSもWPF普及させたいならIEとかオフィスのIFを公開してWPFでプラグインを 簡単に作れるような実装をすればいいのにね。 IEのBHOなんてとてもいじる気になれない。なんで未だにUIがらみが COMなんだよ。 お気に入りとかRSSのサイドパネルにカスタムのパネルを WPFで自由に作って簡単にロードできたらWPFつかうきにもなるんだが。 どんどん作れるようにすればいいのに。
>>104 WindowsXPで走らせるとモッサリするからな。
WPFが増えるには、WindowsXPの比率が下がらないとね。
Beta1で評価が高いWindows7、製品版の完成度と出来映えに掛かる!
>>108 まぁ要するに、公開当初のコントロールが不十分で
しかもVS2008のエディタがdでも無く貧弱だった
これに尽きる
上の方でちまちまフォーカスしてプロパティ設定するより直打ちがいいとか抜かしてるのいるけど
直打ちじゃそもそもどんな属性があるのか「その場」で分からんじゃないか
とか言うと「最初にヘルプ嫁ボケ」とか言われそうだが、昔から読み辛いのに定評あるだろヘルプは
ただでさえ作法違うんだから、一目瞭然にすべきだった
プログラムでビットマップデータ変更すると即座に表示に反映される、ってことしたいんだけど WPFだとどうすればいいの?
どのレベルで分からないのさ?
>>111 WriteableBitmap?とエスパーしてみる
WPF,xamlまださわったことないんだ だからどのレベルといわれてもw WriteableBitmap?ぐぐってみる、ありがとう エスパー大好き^^
Dependecyつかえば?
Dependency? 依存関係プロパティとかいうやつですか? 勉強してみます ありがとう WriteableBitmap、チョイ見た感じわかりやすそうでいいですね DirectX?やってるような気分になる ほんとエスパー大好き^^
>>110 なんでMSってヘルプ作るのこんなに下手なんだろうな
形にこだわってるという印象がある 体裁ととのってればよし、みたいな
伸びてると思ったらこれか!
120 :
デフォルトの名無しさん :2009/02/04(水) 16:56:24
>110 xaml直打ちはありえんな。今時ウェブデザイナでもそんなことはせん。 そもそも「UIとロジックの分離」ってのが胡散臭すぎる。 ウェブの世界では確かにUIはデザイナが作ってるけど、そもそも商用パッケージ 製品でもない限り、デスクトップアプリケーションの世界UIデザインとロジックを分 離して別々の間が作るなんてあり得ない絵ゾラごとだとおもう。 xamlはxbapとかsilverlight専用でいいよ。
>>117 osx になってから、Appleの開発者サイトは見やすくなった。
>>117 互換性ってのを気にしてるんじゃない?
Macはそこらへん無視だから作り直したりできるけど、MSは数十年前からの積み重ねだから自由が利かないんじゃない?
>>120 多人数開発が当たり前のデスクトップアプリケーションで、UIとロジックをろくに分離せずに開発するとか完全に死亡フラグ
124 :
デフォルトの名無しさん :2009/02/04(水) 22:25:43
>>123 画面設計とバックエンドを分離することはあるが、UIと「UIにまつわる」ロジックを
分離するなんてありえんだろ。
>>124 モデル部、モデル部と連携するUIイベントハンドリングと相互作用、UIでの表示とイベント操作を行うコントロールは分離可能。
WPFでのXAMLは2と3の分離
126 :
デフォルトの名無しさん :2009/02/05(木) 08:27:38
>>125 MVCの役割をキチンと分離して見通しがよく、相互に影響の少ない
プログラミングを、なーんて話と、実際にを分離・分業で作成して
うまくいくかどうかって話はべつもんだろ。
UIの入出力なんてそもそも不可分いったい何だから、「分けましょう」
なんて教条主義ふりかざしたところでうまくいかんものはいかん。
デザインがプログラミングとは別に意味を持つwebの世界ならともかく、
デスクトップアプリケーションでV,C分離して分業する意味もないし、
そんなことして品質と生産性が保てるとは思えん。
理想論としては分業しなくても極力見通しよく設計する方がいいのは
確かだけれど、
・分業するためにはVCをきっちり分離しておかないと という話と
・分業も必要ないのに VCをがちがちに分けすぎたものが果たして
使いやすいのか? という話を混同してない?
>>126 いや、業務アプリでも捨てコードとかでないならきっちりやっとくべきだと思うけどね。
動かしたあととかに色々変えてくれとか言うものも出てくるはず。その中にはきちんと分離しておけばZAMLレベルの修正で住むものも宅差なると思われ。
ドメインモデルとのやりとりはUIの中のVからはやったらあかん。
128 :
デフォルトの名無しさん :2009/02/05(木) 11:04:03
>>127 ごめん、俺の論点の出し方がわかりにくかったかも。
・どんなプログラムでもMVCを疎な設計にしておくべし → 同意
・M,V,Cを分業して別々な人が設計するならMVCの分離は必須 → 激しく同意
ところが上二つから
・V,Cは別々の人が設計すべき→・だからXAMLがいいんだ
という話にはつながらないはず。
分業はほんらいできればしたくないんだよ。究極には一人の人が設計から
実装まで完結できればそれが一番品質も、生産性も高いと思う。
ところが現代の大規模システムではそんなのとうてい無理だし、ウェブ系の
アプリケーションのようにデザインが重視される世界ではそもそもプログラマに
そのスキルがないから、「仕方なく」分業するわけだ。
XAMLは、その「仕方なく」の世界のために作り出されたものだから、別に
そんな必要のないときに使うと 使いにくいものになっているってのが俺の持論。
だいたい、UI設計の分離といっても、ちょっとした振る舞いやレイアウトの変更
程度なら確かに"XAMLレベルの修正ですむ"ケースもあるだろうけれど、
現実のプロジェクトではそんなことあり得ない。 これはMVCモデルのせいじゃ
なくて、 何をしたいのかよくわかってない糞ユーザーと、いつまでも
要件も仕様も凍結できず工程がぐだぐだの腐ったプロジェクトマネージメントの
せいだが…。
MVCモデル開発が仕様変更に強いというのは嘘だと思う。仕様がキチンと確定
していれば、MVCをキチンと分離した設計によって、効率的な分業が可能
というのが正しいのではと思う。
少なくとも現実に目を向ける限り、分離が可能なのは実はVとCじゃなくて
"Look"とVCだと思うんだよなぁ。。。"Look”のためだけならXAMLもあながち
悪くはないと思うが…。
>・V,Cは別々の人が設計すべき→・だからXAMLがいいんだ これが違うというのは同意。また分業しないほうがよいというのも同意。 でも仕様が不明確で肯定がグダグダになるのとMVCなどで分離するかどうかはまた別のはなしかと。 どうせ全員一致のMVCの定義すらないわけだしそこらへんの言葉遊びしても意味ないかと。 WinFormsよりはWPFのほうがいずれにしてもUIとモデル部などを分離しやすいのは確かだし。 仮に分業目的でなくてもWPFでの分離の仕方はそれなりにいいと思う。その手段としてXAMLがあるわけだが、それは必須条件じゃないし。
>>130 かなり面白いな。
どっかにサンプルソースがないのかねぇ…。みつけられんかった。
>>130 愛用のoperaじゃぴくりともう五課ねぇ・・・
>>132 さぁ、Opera 10 alphaを入れるんだ
>>130 何が面白いんだよ馬鹿しかもSilverlightだからスレ違いだろボケ
見たけどページはSilverlightだけど中身はWPFじゃん HTMLはスレ違いとかならかわいげがあるが
両方あるんだけど、、、
ソースもあれば最高なんだけどな
VirtualizedWrapPanelが無いのはなぜなんだ…
僕らが車輪の新生産を出来るように。
StackPanelは画面内に収めるのが普通だから
System.Windows.FormsのLocationに相当するものはWPFのコントロールにはないの?
Canvas
WPFにもなってLocationなんて指定する奴はWPFの存在意義がわかってない
144 :
デフォルトの名無しさん :2009/02/07(土) 13:06:59
XAMLでブール値を設定するにはどうしたらいい? 〜〜〜="True" じゃぁ文字列になってしまう。
WPFってエフェクトさえ使わなければ軽い気がしてきた
3.5はシェーダ使うようになったからエフェクト軽くなったらしいけど
>>144 プロパティの型がBooleanならそれで通る
ContentみたいにObject型の場合は,ルート要素で
xmlns:sys="clr-namespace:System;assembly=mscorlib"
とした上で
<Button><Button.Content><sys:Boolean>True</sys:Boolean></Button.Content></Button>
ウィンドウの大きさを変化させたとき 右下に配置したボタンがずっと右下にあるようにするにはどう設定すればいいですか?
Grid使うとか,DockPanelで下にStackPanel { FlowDirection = LeftToRight }配置してその中に入れるとか WinFormsのDockみたいな考え方はしない
間違えたRightToLeftだった
152 :
デフォルトの名無しさん :2009/02/09(月) 00:45:24
>>149 VerticalAlighnment="Bottom", "HorizontalAlignment="Right"
じゃだめなの?
>>152 GridやPanelを組み合わせるのはよくやる
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="30"/>
</Grid.RowDefinitions>
<Canvas Grid.Row="0"></Canvas>
<StackPanel Grid.Row="1" Orientation="Horizontal" FlowDirection="RightToLeft">
<Button Height="23" Name="button1" Width="75">Button1</Button>
<Button Height="23" Name="button2" Width="75">Button2</Button>
</StackPanel>
</Grid>
155 :
デフォルトの名無しさん :2009/02/09(月) 07:51:19
ARToolkit+DirectShow.NET+WPFのシンプルなスケルトンを作ってみた。
微妙にスレ違いかもしれないけどARToolkit関連のスレが消失しているのでここに書かせてくれ。
ちょっと前にミクさんが机の上で踊ったりする動画がニコ動で流行ったりして、
ARToolkitってのが流行ったじゃん。でも、このARToolkitって、3D描画はOpenGL、
UIはGLUTっていう融通が利かない仕様になってたり、必要なくてもOpenVRML
ライブラリが必要だったり、C++以外での開発に難があったり、と(俺には)敷居が高かった。
で、brains-N-brawnさんがARToolkitの改良版のARToolkitPlusのPInvoke可能なdllと
そのdllをPInvokeするC#で書いたラッパーコードを作って、さらに3D描画をWPFでやる
サンプルプログラムを
http://www.mperfect.net/wpfAugReal/ で公開したんだ。
俺はこれは使える!と思ったんだけど、brains-N-brawnさんのコードはARToolkitPlusの
色々な機能を試していて軽量なサンプルとは言い難い物だった。それで、自分でARToolkitPlus+DirectShow.NET+WPFの組み合わせの最低限の内容を持って十分に整理された
スケルトンコードを書いてみた。こいつは特別なライブラリを導入しなくてもVisual C# 2008
のみでビルド可能でしかも3D部分はWPFだし、WPFだからGUIとの連携も容易だしで、
これからARを始めようとする人にはサンプルとして比較的向いているかもしれないと思う。
そんなわけでコードは
http://sites.google.com/site/augmentedrealitytestingsite/download ここに置いてある。あと、
http://www.nicovideo.jp/watch/sm6074669にデモ動画を アップしてみたけど、ミクさんとかの面白いネタがあるわけじゃない。
ニッチ市場向けの内容なのに長文ですまない。せっかくだから誰かが活用してくれるとうれしい。
>>150 ,151,153,154
ありがとうございます
Dock、Dockの階層化でやってみて所望の動作ができることを確認しました
>>152 やってみ
>>117 なんでTipsみたいなものをもっと大量に用意しないんだろうな。
ネットであさったりあれこれ実験したり、(それこそこういうとこで聞いたり)に
多くの人間がどれだけ無用な時間を取られていることか。
割く人員が少ない(天下のMS様だがそういう金はなぜかない)とでもいうのなら、例えば適当な学生を複数雇って、
よくあるタイプのフリーソフトを指定して(この「ちょっと高機能な関数電卓ソフト」の類似品を1からWPFで作ってみてくれ)
わかりにくかった点はどこで、どう解決したのレポートを書かせて、
適当にリライトしてアップすればいい。
「ただでも習得しようと思っていたところ」だというので、
1本十万円とか1ページ1万円くらいでバイトとして喜んでやる奴幾らでもいるだろう。
節約したいならインドあたりの工科大の学生とかでいいわけで。
「WPFでこれらの見た目も機能もカラフルな数々の便利ソフトがすぐ出来ます。
全ソースと整理されたわかりやすい解説はこちらのページ群をご参照」
使う気になる人間・会社、ぐっと増えるんじゃないんだろうか。
そういうことをほとんどせず
>>100
金というか資本主義じゃなかったら今だにマンモス狩ってるだろjk
技術オタク万歳 ゲーム廃人よりたちが悪い。 そこに付け込んだのがWPF つかわなきゃいいだけ
今日、渋谷の書店でWPFの書籍を買おうとした かなり品ぞろえが悪かった(3,4冊くらいしかなかった) WPF大丈夫なのか? 不安になって本買うのやめた
まずは、WPFのなんたるかから勉強しろ。 哲学みたいなもんだ
本買わなかっただけでその仕打ちorz
いいんじゃん自分だけわかるみたいなこと言わせておけば 使う人少なければ開発続かないだけだし
デスクトップUIの技術自体がもうそれほど重要視されない時代で、なおかつ、 MS系技術がやたらめったら嫌われる傾向の日本では、今後も流行ることないから、 日本語ドキュメントが山ほどあるみんなが使っているものを触らないと落ち着かない人であるとか、 マイナーなものに手を付けることを、今後(その技術のエッセンスがどっかで生き残るだけじゃなくて) その製品自体が普及するか否かだけで不安になる人は、来ないほうがいいよと言ってあげただけ。
サンプル山ほどあるだろ
ほんとその通り。 UI技術に投資するなんて無駄なだけ。 もっとやるべきことがある
勉強すればいいと思ってる馬鹿は大抵学歴が高い傾向にある 本質がわからない。辿りつけない層であり、GDPを上げるために仕込まれた人口比率の最も多い層でもある プログラミングすらしないで目的を達成させることのほうが大事 お前の言っているやるべきこともたぶん糞
>プログラミングすらしないで目的を達成させることのほうが大事 そりゃそうだが、プログラミングする以上はちゃんと勉強しろよ
軍事技術が優先だったけど今はそいつらが集まって自動でアプリケーションを作りだす人工知能の開発に本気になってるから それまで待ってろ。もう50年もすれば人がいらなくなる
>>171 その頃ロシアでは ウォッカの生成方法を考えるAIの研究をしていた
>>171 未来の二つの顔だな
あれの中ではナイスなAIのおかげで皆働かなくてよくなったとなってたが、もし実現しタラ超格差になるだけのような気がする。
俺はWPFに賭ける 今すごい使い方を編み出せばMSからMVPをもらえるかも知れん やってやるぜ
>>174 釣り針垂らしてスレチの阿呆に餌を与えようとするなw
WriteableBitmapとBitmapなにがちがうですか?
過疎ってる・・・ OpacitySliderはスライダーで、 RotateTransform rotate = new RotateTransform(0); OpacitySlider.LayoutTransform = rotate; DoubleAnimationUsingKeyFrames rotationAnimation = new System.Windows.Media.Animation.DoubleAnimationUsingKeyFrames(); rotationAnimation.KeyFrames.Add(new LinearDoubleKeyFrame(0, TimeSpan.Zero)); rotationAnimation.KeyFrames.Add(new LinearDoubleKeyFrame(360, TimeSpan.FromSeconds(5))); Storyboard rotationStoryBoard = new Storyboard(); rotationStoryBoard.RepeatBehavior = RepeatBehavior.Forever; rotationStoryBoard.Children.Add(rotationAnimation); Storyboard.SetTarget(rotationAnimation, OpacitySlider); Storyboard.SetTargetProperty(rotationAnimation, new PropertyPath("(FrameworkElement.LayoutTransform).(RotateTransform.Angle)")); rotationStoryBoard.Begin(); でスライダーは回転するんだけど、 Storyboard.SetTarget(rotationAnimation, rotate); Storyboard.SetTargetProperty(rotationAnimation, new PropertyPath("Angle")); って変更すると回転しなくなる。何でだか分かる人いる?ちなみにスライダーを回転させたいん じゃなくて、別の問題を単純化したらこうなったんだけど。
必ずしも必要なものが出現するとは限らない 社員を遊ばせておくぐらいなら何かを作らせた方がいいという時だってある Vista、C#、WPFなんかがそれに当てはまる。
>180 これって、描画領域になんか重ねたりとかも出来るの?
>>182 Canvasの上にViewport3Dという構成だからCanvasに重ね描きするかその上に別のコンテナを乗っけてViewport3DとZオーダーを調節すれば良いんじゃない?ソースあるから適当にいじってみて。
184 :
デフォルトの名無しさん :2009/02/12(木) 11:19:15
visual studioで app.xamlのstartupUriに指定されたウィンドウのxamlファイルの ファイル名を変更しても、リファクタが効かず、毎回手で変更しないといけない のですが、これってバグですか? ファイル名ではなくクラス名としてのwindow1の名を変更したときにはちゃんと xamlにも変更を反映してくれるので、技術的な問題と言うよりも、忘れられちゃった としか思えないんですが。 みなさん、デフォルトの"window1.xaml"のまま使っているんでしょうか?
>184 C#の仕様上はファイル名と中のクラスには何の関係もないんだから、 中に記述されていうクラスのクラス名を変えないとリファクタリングは 効かないに決まっている。ただ、その場合もxamlの記述までは置換され なかったような記憶があるけれど。
185です。
>>184 あ、その場合にはうまく行くのね。
187 :
デフォルトの名無しさん :2009/02/12(木) 11:52:23
>>186 windows formのときは メインウィンドウのcsファイルの名前を変更すると
formクラスの名前も、formクラスの参照先も、designer.cs やresxファイル
の名前も全部自動で変えてくれたので、Form1.csをMainForm.csとか
自分のわかりやすい名前に変えるだけで手間いらずだったんですけどね…。
理想はwinformの時みたいに、Window1.csをMainWindow.csに変更したら
window1クラスの名前およびその参照先を全部MainWindowクラスにして、
app.xamlのstartupUriまで一気に変えてくれることなんですけどね。
今は ファイル名の変更、クラス名の変更、startupUriの変更と3ステップ必要
なのがにくい…。
SuspendLayout, ResumeLayout, Invoke, Refresh, Update, Invalidatedと等価なのは何でしょう?
すいません、「WPF」での「Dim IconB As Icon = Icon.FromHandle(Icon_hWnd)」はどこにあたるのでしょうか? WPFでIconは全てImageに変わったというのは判ったのですが、アイコンハンドルから画像に変換することができませんでした。 もしかして、別の方法でハンドルからアイコン画像を変換する方法があったら教えてください。 よろしくお願いしますm(_ _)m
>>187 186です。
Windows formsだとそうなんだ。知らなかった・・・。
IDEがスタイルを強要するみたいで個人的には嫌だけど、スタイルが受け入れられるなら便利では
あるね。それと多分JAVA出身の人なんかはファイル名と中身が関連付かないと気になるんだろうね。
そう言えば、System.Windows.Forms.Formを含んでいるcsファイルを開くと必ずデザイナが
開いて、csファイル毎にデザイナで開くかエディタで開くか設定できないのも個人的には嫌だった
なあ。しかも、Formを継承したクラスが一番初めにないとエラーが出たり。Windows Formsでは
C#とクラスライブラリの仕様だけでなくIDEの支援もセットでUIのフレームワークを形成して
いたんだよね。昔のVBと同じで。それがWPFで解決されてUIはC#から独立した言語/デザイナ
で定義するようになったのだから今さら言語仕様にない事をIDEが勝手な判断で手出しするのは
控えてくれた方が個人的にはうれしいなあ。x:Classなんて一属性に過ぎないのだからxamlの
ファイル名と勝手に関連付けられたりしない方がすっきりする。まあ個人的な見解ですが。
自己解決しました。
>>191 俺は知らない事なので、せっかくだから解決内容を書いてもらえるとうれしい。
もっとスマートならいいのですが、本当に自己が満足しただけの解決なんです orz WPFでフォームをホストしてから、その中で「FromHandle」を使っただけという残念な方法です。 恐らくWPF内でForm系列のものを利用できるような方法があると思うのですがMSDNにも載っていないようなので諦めました(爆
>>194 さんありがとうございます!
何とか無事にアイコン取得できそうです。
Win32との相互というのは覚えとくべきですね
SendToBackってどうすればいいですか?
197 :
デフォルトの名無しさん :2009/02/13(金) 05:52:26
最近、WPFが遂に流行ってきた気がする
ない
199 :
デフォルトの名無しさん :2009/02/13(金) 21:04:43
まじかああああああああああああ ついにきたあああああああああああああ
Miguel、GNOMEやってたときはかなり偏屈なあんちゃんだったように思うが なんかもう完全にMSの飼い犬になってるな。そのうちNovellやめて MSに入社するんじゃないか?
>>202 年を重ねるうちに丸くなったかお金のおいしさをしったかのどっちかだろうな
204 :
デフォルトの名無しさん :2009/02/14(土) 02:03:55
クラスライブラリ(dll)からWPFのwindowを作成して表示するには どうしたらいいんでしょうか? winformなら「新しい項目の追加」でformを追加しておいてnewしてshowすれば 表示できましたが、WPFだとそもそもユーザーコントロールしか追加項目 に現れてきませんが、そういうことはそもそもできないんでしょうか?。
WPF試して見ようと思ったんですが、 3.5のSP1インストールできないんだがどうすればいいんですか・・・? [02/14/09,05:10:52] Microsoft .NET Framework 2.0a: [2] Error: Installation failed for component Microsoft .NET Framework 2.0a. MSI returned error code 1603 [02/14/09,05:11:18] WapUI: [2] DepCheck indicates Microsoft .NET Framework 2.0a is not installed. [02/14/09,05:36:58] Microsoft .NET Framework 2.0a: [2] Error: Installation failed for component Microsoft .NET Framework 2.0a. MSI returned error code 1603 [02/14/09,05:37:28] WapUI: [2] DepCheck indicates Microsoft .NET Framework 2.0a is not installed. [02/14/09,07:56:44] Microsoft .NET Framework 3.5 'package': [2] Error: Installation failed for component Microsoft .NET Framework 3.5 'package'. MSI returned error code 1603 [02/14/09,07:56:54] WapUI: [2] DepCheck indicates Microsoft .NET Framework 3.5 'package' is not installed. よろしくお願い致します。
207 :
デフォルトの名無しさん :2009/02/14(土) 13:05:02
>>204 自己解決しました。
いったんUserControlを新規項目として追加して
UserControlをWindowにxaml側、cs側両方で書き換えたら
普通に new →show()で表示することができました。
でもなんでIDEから簡単にwindow追加できないんだろう。
210 :
デフォルトの名無しさん :2009/02/15(日) 14:47:42
ListBoxの選択色を変えるにはどうしたらいい?
212 :
211 :2009/02/15(日) 16:11:46
じゃなかった。 確か、ItemContainerStyleプロパティに割り当てるスタイル中で、<Style.Triggers Property="IsSelected" ...みたいにやれば良いという単純な話だった気がする。 何かの理由でデフォルトのコントロールスタイル中の同様のトリガーが優先されてしまうために コントロールテンプレートまで書き換えた事があったんだけど、多分普通は↑で済むと思う。
もっと簡単にできる wpf listview selection colorでぐぐったらすぐ出てくるよ
215 :
211 :2009/02/15(日) 16:31:34
試してみたけど、やっぱりTemplateプロパティを書き換えるのも必要だね。 <ListBox> <ListBoxItem>Apple</ListBoxItem> <ListBoxItem>Orange</ListBoxItem> <ListBoxItem>Grape</ListBoxItem> <ListBox.ItemContainerStyle> <Style TargetType="{x:Type ListBoxItem}"> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="{x:Type ListBoxItem}">
216 :
211 :2009/02/15(日) 16:36:10
<Border Name="Bd" Background="{TemplateBinding Background}" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Padding="{TemplateBinding Padding}" SnapsToDevicePixels="true"> <ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" /> </Border> </ControlTemplate> </Setter.Value> </Setter>
217 :
211 :2009/02/15(日) 16:37:15
>>214 あれ、俺道化?まあとりあえず最後まで書くので必要なら使って。
<Style.Triggers>
<Trigger Property="IsSelected" Value="true">
<Setter Property="Background" Value="LimeGreen" />
</Trigger>
</Style.Triggers>
</Style>
</ListBox.ItemContainerStyle>
</ListBox>
コントロールテンプレートはPresentationFramework.Classic.dllからReflectorのBAML Viewewプラグインを使って抜き出して、トリガー関係をごっそり削除したもの。関係ないところまで消しちゃっている(IsEnabledのトリガーとか)ので、実際にはもう少し色々試してみて。
リアルタイムで受信したデータに応じて色々表示変えたいんだが、データに応じてUIElementを色々入れ替えたりすると言うことでよいのかな?Rectangleの色だけを変えるとかってできましたっけ?
Vistaで動かすともっさり、XPだとまあまあなアプリ Windows7だとどうなりますか?快適に動くでしょうか?
一般論として最適化はされているみたいだね。 俺は、古いPCにWindows 7を入れたので細かいパフォーマンスの比較はできないけれど、 WPFアプリの起動は確実に速くなっている。
>>214 って結局どんな方法?
ググって見たけど、デフォルトのテンプレートが使っているリソースのキー名で
ブラシをListBoxのスコープのリソースで定義する方法しか出なかった。
チートっぽいけどこれ?
>>218 Rectangle.Fill変更すれば変わるっしょ
>>222 グラフのようなもの変えるんだとLineElementをつくり変えて入れ替えないと駄目なのかね?
とりあえずうごくんだがなんか無駄な子としてるような気が・・・
折れ線変化させたりする程度なら、 Polyline置いてdependency property使えば瞬殺だと思うんだが
http://msdn.microsoft.com/ja-jp/library/aa970908.aspx#guidelines リンク先の直前に
>Windows Presentation Foundation (WPF) は常にアンチエイリアスされたテキストを
>生成します。生成されたテキストが静的な場合は、ピクセル スナップされます。これに
>より、グリフがピクセルグリッド上に直接配置されて、アンチエイリアスされたテキス
>トの外観が鮮明になり、テキストがよりクリアになります。ただし、Windows Presen
>tation Foundation (WPF) が、スクロール、スケーリング、アニメーション化された変
>換など、アニメーション的な動きを検出すると、そのような動きが完了するまでピクセ
>ルスナップはオフになります。アニメーションやスクロールの動きが完了すると、ピク
>セル スナップがゆっくりと復活します。
だそうなので、アンチエイリアスはするけれど、ぼやけないように気は使ってくれるみたい。
だから気にしないで良いんじゃない?
気になっちゃうんだもん・・・ WindowsFormsHost 使えばいいんだけどさ
俺はむしろ、ClearType万歳、アンチエイリアス万歳!だけどなあ。
さすがにビットマップフォント使えばアンチエイリアシングされないと思わない?
Bitmapに描画すればアンチエイリアスはかかるかも知れないけど ClearTypeにならないんじゃね? RGBディスプレイで作った画像がBGRディスプレイで見ると悲惨になるような設計されてないはずだし。
idlがあるならmidl.exeとtlbimp.exeでdll作れよ
233 :
231 :2009/02/17(火) 21:11:56
>232 ちょっと調べて知恵をつけて midl /newtlb effects.idl してみたんだけど、effects_i.c, effects_p.c, dlldata.cしかできない・・・ これ以上は初心者板向けになりそうだから、一週間たってwpfwmp.zipが手に入っていなかったら まじめにCOMを勉強するわ。
ScrollViewer のインスタンスの垂直スクロールバーが 一番下まで来たかどうかを調べる方法って、どうすればいいんでしたっけ? やりたいことは ScrollViewer に対して、コントロール内で PageDown() メソッドを 呼んだあと、もうこれ以上ページを下におろすことができないかどうかを知りたい。 でもなんだかうまくいきません。 ぐぐっても出てこないし、歯がゆい。 もしご存知でしたら教えてください。。。。。。
WPF 勉強中なんですが、 Windows に Image を張って、 そこに、jpg 画像ファイルを読み込みました。 この画像ファイルに、文字列を書き込みをしたいんですが、 どのようにしたらよいでしょうか? Image.Source から、DrawingContext を生成してなるのかな と思いますが、やりかたがわかりませんでした。
画像にじゃなくて画像ファイルに?
画像に、です すいません
>>235 HorizontalOffset/VerticalOffsetとScrollableWidth/ScrollableHeight
>>236 なんでもかんでもGraphcsで描くWinFormsとは根本的に考え方が違うんだよな
特殊な場合を除いて基本的にDrawingContextは使わない
DrawingVisual作ってImageDrawingやGlyphRunDrawingを追加して
RenderTargetBitmap.Renderが正当かな
Canvas使うとかAdorner使うとか色々あるぜ
いずれにしても元のImageSourceに直接描くのは無理
>>236 じゃないけど,最終的にRenderTargetBitmap以外の方法はあるのか知りたい
WPFのコントロールテンプレートで迷ってしまいました、どうもラジオボックスの連動がうまく行きません。 <Window.Resources> <Style TargetType="RadioButton" x:Key="Test_Style"> <Setter Property="RadioButton.FontSize" Value="20"/> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="RadioButton"> <StackPanel> <RadioButton x:Name="tet" Content="!" /> </StackPanel> <ControlTemplate.Triggers> <Trigger Property="IsChecked" Value="True"> <Setter TargetName="tet" Property="IsChecked" Value="True" /> </Trigger> <Trigger Property="IsChecked" Value="False"> <Setter TargetName="tet" Property="IsChecked" Value="False" /> </Trigger> </ControlTemplate.Triggers> </ControlTemplate> </Setter.Value> </Setter> </Style> </Window.Resources> <StackPanel VerticalAlignment="Center" HorizontalAlignment="Center"> <RadioButton x:Name="RadioButton_1" Style="{StaticResource Test_Style}" Content="RadioButton__1" IsChecked="True" /> <RadioButton x:Name="RadioButton_2" Content="RadioButton__2" IsChecked="False" /> </StackPanel>...
>>242 ImageDrawingは?
何をもって最終とするのか知らんが
245 :
242 :2009/02/17(火) 23:30:47
元の画像に文字を合成したImageSourceを得たいんでしょ その完成したImageSourceを作る段階
やりたいことは、普通にフォームにラジオボックスに2つ張った状態を目標にしています。 通常ならどちらか一方がチェックされれば、もう片方はチェックが外れるようにしたいです。 この方法では一度ならラジオボックスのチェックがどちらか一方に付くようになるのですが、 もう一度チェックしなおすと両方がチェックされた状態になってしまいます。 プロパティの値も実際に見てみたのですが、一度だけ成功していますが、それ以降は値が変化していないということになりました。 Private Sub Window1_Loaded(ByVal sender As Object, ByVal e As System.Windows.RoutedEventArgs) Handles Me.Loaded MsgBox(Me.RadioButton_1.IsChecked & vbCrLf & Me.RadioButton_2.IsChecked) End Sub true:False Private Sub RadioButton_2_Click(ByVal sender As Object, ByVal e As System.Windows.RoutedEventArgs) Handles RadioButton_2.Click MsgBox(Me.RadioButton_1.IsChecked & vbCrLf & Me.RadioButton_2.IsChecked) End Sub False:True Private Sub RadioButton_1_Click(ByVal sender As Object, ByVal e As System.Windows.RoutedEventArgs) Handles RadioButton_1.Click MsgBox(Me.RadioButton_1.IsChecked & vbCrLf & Me.RadioButton_2.IsEnabled) End Sub True:False (ここで見た目は両方ともチェックされた状態になってしまうが、値は希望通り)
>>246 コレハンミスです。
よろしくお願いします m(_ _)m
248 :
236 :2009/02/18(水) 00:01:49
RenderTargetBitmap でいけそうです。
ありがとうございました。
>>245 そのとおりです。
238は俺じゃないんだが・・・。
書き込んだのを忘れてるんだろうか。
249 :
244 :2009/02/18(水) 00:08:35
DrawingImageだった 名前が紛らわしいよまったく
DrawingImageは保存できなくね?
>>248 その年でもう健忘症か?
ほっとくと中川みたいになるぞ
病院いってこい
保存は条件じゃないっしょ
コードでResourcesを設定して、XAMLからStaticResourceとして読み込んでいるんだけど デザイナ側はコードで設定される事を知らないので >読み込みで問題が発生しました >デザイナを読み込む前に修正しなければならないエラーがドキュメントに含まれています。エラーを修正してからデザイナを再度読み込んでください。 と言われてデザイナが読み込まれない。 このケースだとXAMLでリソースを定義してDynamicResourceとして読み込ませておいて、InitializeComponent後に設定するのが正攻法だと思うけど <Window.Resources> <app:Test x:Key="Test"/> <Window.Resources> この定義方法だと、勝手にインスタンス作ろうとして引数0のコンストラクタがないとエラーになってしまう。 デザイナにコード側で設定されるって事を教えるにはどうすべきなのでしょうか。
ObjectDataProvider使えばコンストラクタに引数渡したり、メソッドの結果にバインドできるのか。
255 :
231 :2009/02/18(水) 12:53:18
>232さんの助言のお陰で、わりと上手く行っています。Adam Nahanさんからの返信はまだ ありませんが、どうやら自力でできそうです。>232さん、ありがとうございました。
WPFでGDI風にテキスト書かせたりするのはどうすればいいですか? ちなみにxamlはつかってません C#でしこしこ書いてます
コンテキスト.DrawString("a")みたいなの? OnRenderをオーバーライドすればそれっぽいことができるけど激しく非推奨 要素を置いていくだけで同じことできるしパフォーマンスも良くないし何よりWPFらしくない
初心者でよくわかってないんです どうすればいいでしょう? データ更新が多いのでできるだけ早く描画したいのですが
頻繁にOnRenderで更新するのは最悪 普通に要素を置いていったあとはそれらのプロパティの変更だけですませて できるだけ要素の入れ替えは行わない 画面に表示するだけならDrawing系の要素を使うと軽い
うー Drawing系の要素って何?orz
何の参考にもならないと思いますが、何とか希望通りの動きをするようになったのでメモしておきます。 <Window.Resources> <ControlTemplate x:Key="RadioButtonControlTemplate1" TargetType="{x:Type RadioButton}"> <StackPanel> <Label Content="{Binding RelativeSource={RelativeSource AncestorType={x:Type RadioButton}}, Path=IsChecked}" /> </StackPanel> </ControlTemplate> </Window.Resources> <StackPanel x:Name="LayoutRoot" VerticalAlignment="Center" HorizontalAlignment="Center"> <RadioButton Content="RadioButton" Template="{DynamicResource RadioButtonControlTemplate1}" /> <RadioButton Content="RadioButton" Template="{DynamicResource RadioButtonControlTemplate1}" IsChecked="True" x:Name="radioButton" /> </StackPanel>
わからん Drawing系の要素、なんて言葉どこにもでてこない textBlockとかいうのつかったほうがはやいってことか?
System.Windows.Media.Drawingクラス(の派生クラス) 画面に描画するにはDrawingVisualを使う
265 :
235 :2009/02/18(水) 18:03:32
>239 レスありがとうございます。 各プロパティで試してみたのですが、うまくいかない原因は別にあったようです。 実際にスクロールバーの制御をおこなうときに、スクロールバーが表示されていなかったという 何ともお粗末な原因でした。 穴があったら入ってゆっくり眠りたい気持ちです。
なんでwpfのスレが伸びまくるんだろうか?
いいドキュメントがないから
本もほとんどないしな
決定版が一冊出ればそれでいいんだけどな
決定版ドキュメントが一冊出れば飛び付くんだが、最近の有力なエンジニアは 自ブログの充実ばかりで、書籍の執筆熱が冷めている上に、インターネットに 押されている出版社も支援が薄い。 出し惜しみ+買い控えの無限ループ → 書籍出版の衰退
Blendが自動でコード補助とかしてくれたらわかるけど、ヒントすら出てくれないからヘコしんどい
MSDNが使いづらい
探したいものがあって検索してもなかなか見つからない
数十分かけてやっと見つかったと思ったら大雑把にしか書いてなくて迷うこともある
>>271 ヒントでねーわ選択画面ねーわで結局本片手にやるはめになるよな
IntelliSenseが最強の教師って状況はおかしいよな。
Silverlightのドキュメントなんかもっと酷いよ
MSDNで直接探すのは、どこに書いてあるか見当がつく場合ぐらいだなぁ 特定のクラスについて調べたいとか、この辺に探してるやつがある筈 と思う時ぐらい 調べる対象が漠然としてる時は、ググった方が早いね。
WPFをMicrosoft Blendで作るのと、Visual Studioで作るのって何が違うの? 分裂したメリット、デメリットが判らない。 自分的にはVisual Studioではコード候補が出るから何とかなる気もする、 Blendは即コンパイル。 こんな感じ?
プログラマーとデザイナーが同時に作業できるようにってことだったと思うけど タダで配るならともかくこれは完全に失敗だよな
Blendがもっと手軽にコントロールテンプレートを弄り倒せるツールだったらヤル気がでた。
>>277 多分Blendに存在価値がないのが問題
どう見たってプログラム素人が手ェ出せるUIじゃないだろ・・・
>>280 xamlを意識しなければそれなりに使えそうだけどなぁ
ただ、デザイナじゃないからblendは使いこなせなかったけどw
とりあえず、フォーカスするとキモい挙動をする(グラデーションが動く)ボタンなら簡単に量産できると思う。
(センスのない自分が嫌になれるよ!)
色とかかえたりするにはまぁいいんだけどね・・・ 何つーかもうちょっと全体的に使いやすくなって欲しいんだよなぁ FLASH用のツール作ってた人なんだろ、これ作ったの。
xamlとC#の変換ツールないですか? いきなりxaml使えといわれても何やってるのかよくわからないものは気持ち悪くてさわれない
>>283 それを言うならxamlとC++の変換じゃないの?
C#から使うものだけど実装自体をC#でやってるわけじゃなかろう。
俺は詳しくないからxamlをパースしたあとC#に変換しているのか
C++で直接動かしているのか詳しくは知らないが、
283はC#のメモリ管理が内部で何やってるかわからんから気持ち悪いとか言って
わざわざC++で書いたりするわけじゃないんだろう?
ああいう記法でラッピングした以上制約が色々あるから気になるならWindowsFormでやればいいし
そこまで潔癖に気にするやつが使う代物でもないと思う。
むしろaspxだろうJK
>>284 これはひどい
> C#のメモリ管理が内部で何やってるかわからんから気持ち悪いとか言って
CGの動作原理を理解すれば気持ち悪くなくなる
同様に、XAMLとC#の対応関係を理解すれば、XAMLに対する気持ち悪さも消えるだろう
対応関係はDependencyPropertyの解説などを見れば、だんだんわかってくるが、
てっとり早く理解する為に変換ツールが欲しくなるのも理解できる
けど、変換ツールは見たことないな
ライブラリはXAMLをパースして、(ILを出力せずに)直接オブジェクトを生成しちゃってるし
XAMLがC#のコードとして表示されてるのを見たことある気がするんだが、 VisualStudioにそういう機能なかったっけ?
アプリケーション定義のxamlならobjフォルダにC#コードが出力されるけど。
<x:Code> ``` </x:Code> のことを言ってたりする? これならXAMLの中にそのまま記述できるけど?
>>288 ああ、それだった。たいした情報はないのな。
>290 StartupUriのxamlをフレームワークのAPI使ってロードするだけのコードだからね。
>>283 はXAMLがどうC#と関連づけられるか分からないから気持ち悪いと言っているんであって、
>>284 が言うようなC#のメモリ管理なんて言ってないだろうが。
XAMLで書けることはC#で書けるんだから、C#がわかるなら気持ち悪いなんて事は無いだろうに。
293 :
284 :2009/02/20(金) 22:05:03
すまん、俺がボケかましてただけだった。 milcore直接たたいてるのはWPFでXAMLじゃなかったわな。 直接たたいてるとしたらアンマネージドだからああいう物言いになったと。 メモリ管理どーのってのはあくまでも例え。286は例えとわかってくれているが292には通じんかったようだ。 GCは挙動わかっててさえ気持ち悪いとか非効率とかよく言われるものなのに、 まずGC積んでるC#自体を気持ち悪がらないのにXAML程度を気持ち悪がる理由がわからんって事。 例え悪くてすまんな、低脳なんで。 ただ、XAMLで書けることはC#で書けるというのは大抵書いてあることだけど そのままパースして翻訳されてると俺は思ってないし、 そう考えると実際に内部で何やられてるかわからんと言う意味で 283が気持ち悪がってるのかなとは思い直した。
milcoreは最終的な一番低いレベルの描画に使ってるだけ XAMLをパースしてるのはフレームワークのマネージコード
WPFは最終的な描画以外は全部C#で書かれてるよ SilverlightはアンマネージC++にごくごく薄いマネージドの皮をかぶせただけ
マイクロソフトの人がこのスレみて反省してくれればいいのだが
マネージからmilcoreたたければなー
299 :
デフォルトの名無しさん :2009/02/21(土) 09:39:09
299
300 :
デフォルトの名無しさん :2009/02/21(土) 09:39:45
300
Dispatcher.InvokeするとTargetInvocationExceptionが起きるんですが、どうすれば回避できるのでしょう?
中身(InnerException)は?
ごめんなさい、知識なさ過ぎて答えられません InnerExceptionとは何でしょう?
ああ、TargetInvocationExceptionっていうのは呼び出した先でエラーが起きてるってことなのですか? 検索してもさっぱりわかりませんでした それでは調べてみようと呼びだしてるメソッドの中身をtry catchで囲んでみたらなぜかエラーが起きなくなりました なにがおきてるんでしょう?
try{ ほにゃらら }catch(Exception e){ MessageBox.Show(e.InnerException.ToString()); } してみたら?ていうか、キャッチしなかった場合にデバッグ環境で表示されるダイアログでも InnerExceptionは見れるけど。
ごめんなさい、エラーおきてました 時間なくてあせってて 原因もわかりました お騒がせしました お付き合いありがとうございました では
e.ToString() したら InnerException も連鎖的に出してくれたような
TargetInvocationExceptionが起きると出してくれないんですよ だから何が起きてるのかさっぱりわからなくてパニくりました はずかしい
違うスレッドで起きてる例外だからスタックトレースとしては連続してないってだけだろ。 ちゃんと例外の発生したスレッドというかメインスレッド側で処理しておけ。
Blendがうんこ過ぎてメモ帳以下ですが、私の使い方が間違っているものだと思うので質問します。 BlendでBindingするときに、勝手に全ての対象へ「x:Name」を定義してしまうのですが、 デフォで親参照とかにする設定などありますか?
311 :
デフォルトの名無しさん :2009/02/23(月) 12:51:58
xamlっていったんC#のコードに変換してからコンパイルされるんですか?
コードビハインドのコンストラクタにあるInitializeComponent()の定義を参照
すると、window1.g.csみたいなファイルが生成されて、xamlを置き換えた
windows forms時代のようなコードが見られるんですが。
そうやってるなら、いっそのことxamlなしでc#オンリーの選択肢もほしい。
RADツール使うなら、xamlだろうとc#だろうと、かわらんし。
>>283 激しく同意だ。xamlはとにかく裏で何やってるのかさっぱりわからんのが
気持ち悪い。
さっきのInitializeComponent()メソッドなんて定義がどこにもないのに、
使えることになっている。自動生成されたcsファイルいじったらどう反映される
んかねえ。 だいたい、プログラムのエントリポイントはいったいどこにある
んだ??? いくらなんでも隠蔽しすぎなんじゃないのかね、wpfは。
根本的に間違ってる XAMLはC#のコードに変換しているわけではない WPF自身が実行時に直接XAMLをパースして組み立ててる window1.g.csはXAMLを読み込む処理を呼び出して 読み込まれた要素を対応するC#のフィールドに代入するためだけに生成される
C#だけでも作れるよね? xaml使ったのとC#だけのもの、初期化処理は違うとしてもほぼ等価な動作すると考えていいの?
それはもちろんそうだけど RADで生成するからxamlだろうとC#だろうとかわらんというなら わざわざC#を吐かせるメリットがない 言語別に対応しないといけないし動的に読み込むこともできないし 人間が読んだり修正したりするのも難しいし RADが人間による修正に対応するのも難しい
>>311 XAMLからコントロールの論理ツリーが生成される。〜.g.cs のC#コードはそれを参照するため。
それと、ASP.NETと違ってコントロールへはIDによるアクセスじゃなくなった。
> xamlはとにかく裏で何やってるのかさっぱりわからんのが気持ち悪い。
裏とか表ってw
これはW*Fの基本理念の一つで、「1つのプログラム言語やコードで何でもでき、そして何でもやる。」
という旧態のプログラマ的な思想から脱却して、高度にモデル化され、そして機能と役目の分担が
進んだ結果、こう変化したんだよ。
>>313 できるよ。 過去の資産であるWindowsFormライクなプログラミングスタイルも継承しているからね。
過去の資産=過去の頭脳w ・・・過去の技術者を一気に冷たく捨てないところがマイクロソフト。
すごく… 胡散臭いです
UI専用の言語とその構造に基づいたデザイナという組み合わせは、C#のコードをドキュメント化 されていない流儀で自動生成するブラックボックスなデザイナよりも圧倒的に優れていると思う。 Windows Formsは昔のVisual Basicのノリから抜け出せていなかった。 それに、コンテナの配置はxamlでやって、コントロールの動的生成をコードでやって、とか、 役割分担のさじ加減をプログラマがコントロールし易い(Windows Formsでもできるけど)WPF の魅力だと思う。 xamlはxmlベースの構造的な言語だから、不明瞭なのは直接の子要素がChildrenプロパティなのか Contentsプロパティなのか、くらいだけで、同等のコードをC#で書くのってとんでもなく楽。
いやおまえら、partial classくらい知ってろよ。 2.0からずっと、UIとイベントの定義は一緒だろうが。 WindowsFormsとXAML、どっちも同じ。ASP.NETも。 XAMLはC#で全く同じものが書ける。これは最終的に一つのクラスになるから。 複数のソースで一つのクラスが定義できるのがpartial class。XAMLのように 言語が異なるのは既にASP.NETでやっている。
ここまでの議論の参加者で*.xaml.csでpartial クラスの機能が使われている事を知らない奴が いるとは思えないんだが・・・
時代はpartial !! じゃなくてw C#使ってるならそのメカニズムくらい分かってる筈だよ。 つーか、Formデザイナからだけでなく、XML構文によるUI要素の 名前空間、クラス、プロパティ、イベントの表現が、公式フォーマットの XAMLドキュメントという定義で可能になったことが新しい。
そうそう。UI定義の方法は、Windows Forms時代には、デザイナが勝手な流儀で勝手にやっていただけ。でもxamlはXMLベースで標準の構造的な仕様が定まっていて、その構造の上にデザイナが 乗っかっている。だから、ブラックボックスで気持ち悪い、とはならない。
323 :
デフォルトの名無しさん :2009/02/23(月) 21:36:00
> window1.g.csはXAMLを読み込む処理を呼び出して > 読み込まれた要素を対応するC#のフィールドに代入するためだけに生成される いっている意味がよくわからないんだけれど、 window1.g.csはイベントのシンクとかも処理しているように見えるんだが。 フィールドの代入だけなんて代物じゃないんじゃないの? xaml全体がシンタックスシュガーかと思っていたよ。 そんなとこまで隠蔽して、
323が隠蔽された!
window1.g.csがやってること ・リソースのXAMLを読み込む(Application.LoadComponentに丸投げ) ・ロード後,CLRフィールドに要素を代入 ・イベントハンドラのアタッチ
C#だってILに変換される。それを隠蔽とは言わない。 期待される動作が一通りで、その通りの動作をするのならば、より低いレベルが隠蔽されていても 問題にはならない。必要に応じて高レベル、低レベルを使い分ければ良い。 ブラックボックスが気に食わないのは、ただ一通りの動作を期待できないからで、それは知識不足 のせいだと思うんだけど。
XAMLをAPIでパースして、親子関係にのっとり それぞれのUI用クラスを生成してるだけだろ? どこが隠蔽されてて気持ち悪いのかぜんぜんわからねーよ。
バインディングとかがイベントで実装されている事を知らずに、謎のコードが自動生成されている とか勘違いしているのかなあ。 俺が気持ち悪く感じるのは、XAML記述上の直接の子要素がどのプロパティ(ChildrenとかContentとか) に対応するのかXAMLを見ただけでは分からない事だけだ。まあ確かにこれだけは気持ち悪い。
>>322 ARToolKitはC++でライブラリをラップして、
DLL作ってから参照してるのかいな?
>>330 その部分はbrains-N-Brawnさんの仕事。
``ARToolKitPlus - modified to be a DLL and export C-style functions that can be pInvoked from C#''
http://www.mperfect.net/wpfAugReal/ その部分だけpure .netじゃない。そのDLLをPInvokeするラッパはbrains-N-Brawnさんのを拝借
していてそれはpure C#(PInvokeがpureかは別として)。それからDShow.Netも(COM InterOpが
pureかは別として)pure C#。そんでもって3D出力は、NyARToolkitなんかがDirectX SDKに含まれる
Managed Direct Xを必要とするのに対しこちらはWPFの3Dを使用しているのでまあ敢えて言えば
pure(標準の) C#。
というわけで、上記DLLを除いて、オリジナル・非オリジナルのコードいずれも完全に標準のC#と
.NET 3.5(WPF)で書かかれている。まあ、NyARToolkitなんかはARToolkitのコードをマネージコード
に真面目に移植しているので、どっちがpureかというのは微妙だけど。でも、3D出力がWPFである点
によって、とっつき易いアプローチになっている面は確実にあると思う。というか、それで無理やり
関連付けてこのWPFスレに投稿しているわけなんだが。
ごめん、改行が変になって読みにくくなった。
Windows フォトギャラリーで露出とかコントラスト調整すると スライダーの移動に合わせてほぼリアルタイムに描画されるんですが、 この機能を自作 WPF プログラムに実装したい場合どうすればよいでしょうか?
WriteableBitmapでも使って更新しまくれとしか答えようがない 画像処理自体はスレ違い
詳しくないんだが、一応バインディングとかINotifyPropertyChangedインタフェースとかの話題じゃないか?
ビットマップの方更新するだけでよかったはず
どのタイミングで更新、っていいたいんじゃ?
ダイナミックリソースとかバインディングじゃないの?
>>331 を、便利な物を作ってる人がいたんだ!。
ARには興味あったのでいじくってみる。
ソース読ませていただきます。
ほんとにビットマップ更新するならバインディングじゃどうしようもない SliderのValueChangedイベント使うくらい
結局C#なのね
>>323 はタブーに触れて消されちゃったんだなあ。
346 :
333 :2009/02/24(火) 22:01:41
おまえら、エスパーすぐるw
>>343 そこを参考にして画像ビューワーを作ってて、
>>341 のイベントで、
>>334 の方法で自前で露出の調整をしたら、
イベントの処理に5秒もかかっちゃって、
がんばって最適化しても1秒を切ることができなくて、
ためしに、 Vista の Windows フォトビューワーいじってみたら
瞬時に変わるので、これは、GPU 使ってるとか、DirectX 使ってるとか、
なんか自分の知らない WPF テクニックがあるのかと思って質問しました。
だから、
>>340 のリフレクタで解析してみなよ。
俺、Windows XP⇒Windows 7ベータだから、Windows フォトギャラリーないんだ。
WPF自体はDirectXつかってるけどな
単に画像処理の実装が悪いだけだろ WPF自体の描画更新なんか画像処理に比べたら一瞬
unsafeってしってるか?
Bitmapの処理はメモリをロックしてアンマネージでポインタを使わないと遅いぞ〜。
ここはWPFスレですよ
WiteableBitmapは十分速いよ
もともと
>>351 みたいな書き込みの方法しか用意されてない
writeableBitmapにコピーするデータ作るのに時間かかってるんだろうが
354 :
333 :2009/02/24(火) 23:05:09
>>347 >>340 は俺へのレスだったのか。すまん。
reflector は知ってたけど、Windows フォトギャラリー って .net のプログラムだったんだ?
今日は出先なんで無理だが、家帰ったら試してみる。
>>349 そうなんだよ。だから、フォトギャラリーがどうやってるかわかればなぁ・・・と。
>>350 >>351 >>352 WritableBitmap で unsafe でポインタ使っても遅くて、
C++ で書き直して1秒切るところまでいったんだが、
まだ遅いので質問するにいたったわけです。
355 :
333 :2009/02/24(火) 23:06:15
アルゴリズムが違うとか,プレビュー用に簡易に処理してるとか いずれにしてもこれ以上はスレ違い
HLSLでやってみるとか WPFでも使えるようになったことだし
Windows Formsコントロールのオーナードロー拡張なんてもういやだ。 WPFの入れ子コントロールとXAMLが欲しい。 あと文字の強制アンチエイリアスはさせたくない。 こんな要望に対するソリューションて現状ある?
>>354 え、WPFスレで、しかもWPFでどうやるのかって質問だったから、.NETプログラムなのかと勝手に
勘違いしてしまった。そうでないのなら、普通にシェーダ使ってるんじゃないの?
純粋なWPFアプリケーションだとしたら、
>>358 なんかで紹介されているWPFでのシェーダの使用
は最近の更新で可能になったものだから、Vista標準のプログラムとしてはないと思う。
結局、.NETプログラムじゃない、シェーダを使ってるか、画像処理を気合で頑張っている、つまり
スレ違いって所で落ち着きそうだ。
>>359 XAMLの中で、例えばテキストボックスに
<TextBox RenderOptions.EdgeMode="Aliased" x:Name"textbox1" 〜 />
と記述した場合、カーソルバーは1ドット幅の縦棒でシャキーンと表示されるけど、テキスト文字だけは
常にアンチエイリアス処理されますね。これだけ我慢すれば、最良のソリューションじゃないでしょうか。
>>359 Form上でそれ実現する奴作った。それ使ったシステム5月ぐらいにリリース予定。
手伝おう テストするからうpして
>359 ElementHost使えば、winformsにコントロール単位でWPFコントロール 持ち込めるだろ。例えば、ListBoxだけとか。 んで、起動時にSystemFontsの中から適当なの選んで設定すれば、 フォントもwinforms同様になる。
初心者な質問で恐縮です。 InkCanvasのペンの色を変える方法を教えてください。 xamlとC#と両方の方法をお願いします。
キーバインディングでメソッドを呼ぶときは、どのように書けばいいですか? たとえば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はなにでしょう? よろしくお願いします。
> settingbutton_Click(this, EventArgs.Empty); > と書けばいいのですが、 の意味が心底分からんが 適当にCommandsクラスとか作ってコマンドごとにRoutedUICommandのstatic readonlyフィールドを用意 それをKeyBinding.Commandに設定 あとはCommandBindingでコマンドが呼び出すメソッドを設定
す…、すまん。ぜんぜんだめだ。 おれが適当に書くとエラーの山だ。 適当に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){//メソッド} 添削頼む…。
> 適当にCommandsクラスをどこに作る? .csのほう? > public partial class Commands : Window { System.Windows.Input.ApplicationCommandsみたいにstaticクラスでいいよ。 新しくcsファイル作ってそこにでも。 まあ別にCommandsクラスじゃなくてもいいけどな。肝心なのはRoutedUICommandのフィールドだから。 ApplicationCommandsみたいにICommandは一つにまとめるのが自然だと思っただけで。 つかまずApplicationCommands.CloseとかでKeyBindingとCommandBinding使ったの書いてみろよ。 MSDNやヘルプのこれらのクラスの解説にサンプルがいくらでもあるから。
372 :
デフォルトの名無しさん :2009/02/25(水) 18:42:14
WPFの根幹ってWin32API群なの? .NET とどう違うの?
WPFも.NETで動くことは変わらない WPFはSystem.Windows.Formsに代わる新しいGUIフレームワーク 最大の特徴は,Win32ネイティブのコントロールを使用せずにウインドウの中身を 一枚の絵としてすべてのコントロールをDirect3Dで自前で描画してること ゲームの画面にたくさんのキャラクターを描画するのと同じ仕組み
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の一覧はどこにあるのでしょう?
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 :2009/02/25(水) 20:21:42
実験してみたけど、 Command="{x:Static foo:Window1.FooCommand}" は Command="foo:Window1.FooCommand" とどちらでも問題ないみたい。だから必ずしもx:Staticのマークアップ拡張を使う必要はない。
>>373 ありがとうございます
DirectX系で壁画するということはGPUと相性がよさそうですねVista Aeroなんかとも
原始人現る
壁画って何だよ?
381 :
デフォルトの名無しさん :2009/02/26(木) 09:15:54
>>373 WPFで作ったアプリのUIを自動テストするのは、どんな感じ?
大昔つくったアプリは、コントロールにメッセージ送りつけてやったけど。
UI Automationという機能を使うらしい
だれか優しくスマートに懇切丁寧におしえろ。
ListBox.Items.Add("うんこ")見たいな物を3回ループしてやると選択がくるっとんねんけどな、コンテンツだと正常なんだわ。
ListBoxて文字でアイテム管理しとん?
解決方法どないやねん???
>>384
質問が把握できないので返答もできないわ。力になれなくてごめん。
そんな答えほしなかったわぁー。 おっちゃんも暇ちゃうねん、出来るだけはよう答えてくれへんか? 色々問題もあってやな、今火達磨状態やねんで? 誰かに伝えたいこの想い
>>381-382 皆さん、UnitTestのテストレポートってどうしてる?
基本的に、初期値、幾つかの中間値、そして境界値とその内外だけを確認?
UnitTest?なんですかそれは ゆとりにもわかるように説明してください
WPFで読み込んだファイルの取り扱いについて質問があります。 下記のようにファイルを読み込むとロックするのですが、 string imgFile = @"C:\tmp.jpg"; img.Source = new BitmapImage(new Uri(imgFile)); ロックをはずす方法を教えてください。 ちなみにFormの場合には、 pictureBox1.Image = Bitmap.FromFile(imgFile); pictureBox1.Image.Dispose(); でロックをはずすことができます。 よろしくお願いします。
Windows.FormsのBitmapでロックされないように MemoryStreamに読み込んでそこからBitmapを読み込むことはよくやる。 同じようにMemoryStreamに読み込ませてBitmapDecoderで読み込めばいいんじゃないかな?
>>388 BitmapImage bmp = new BitmapImage();
bmp.BeginInit();
bmp.UriSource = new Uri(imgFile);
bmp.CacheOption = BitmapCacheOption.OnLoad;
bmp.EndInit();
みなさま。
早速ありがとうございます。
>>390 これで試してみました。
しかし、ウィンドウは開くものの、ファイルはなにも表示されなくなってしまいました。
>>391 コントロールに読み込んだイメージセットしてないだろ
UI要素の下や上だけに境界線を引くにはどうしたらいい?
>>392 bmp.UriSource = new Uri(imgFile);
だけではセットしたことにならないの?
セットの方法を教えてください。
395 :
393 :2009/02/28(土) 12:57:36
自己解決 <Border BorderBrush="Black" BorderThickness="0 1 0 0">
>>394 >>388 に書いてある
img.Source = new BitmapImage(new Uri(imgFile));
ってコードの、右辺の処理new BitmapImage(new Uri(imgFile))をファイルがロックされないように
書き直したのが
>>390 。出来上がったBitmapImageのインスタンスをimg.Sourceから参照させる
処理は書かなきゃ。
できました。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;
処理の内容の理解をしている限りでは、 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); } これでボタンを押すと、ウィンドウが消えるのですが、ファイルは残ったままです。 アドバイスお願いします。
>>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);
> }
これのパスを間違えてるとかじゃね
>>400 ありがとうございます。
なんだかわからないのですが、一度終了して再起動したら動くようになりました。
いろいろありがとうございました。
WPFの「Frame」カスタムコントロール作成でこけましたorz Blendで作ってもらったFrameのXAMLをVSで読み込ませると 「'Frame' ControlTemplate TargetType は、テンプレートの型 'PlaceHolderControl' と一致しません。」(エラー場所は無駄な事言ってるので省きました) と、例外が発生します。 コントロールを作ってもらっても一緒です。 しかし、これらは実際バグっているわけでもなく、ビルドもコンパイルも正常に動きます。 どうもVSのデザイナだけがこけています。 何かいい回避方法(Frameに似たコントロール)などありませんか? よろしくお願いします。 環境:Windows7 VS2008
言ってることがよくわからない FrameのControlTemplateを作ってるの?それ何の意味があるの? そんなことしないでユーザコントロールにFrameを張り付ければ一緒だと思うんだが
FrameってHTML表示したいときとか 「戻る」「進む」ができるようにしたいときに使うんだよわかってる? コンテンツを飾り付けしたいだけならDecoratorの派生クラス(Borderなど)使う もちろんFrameを飾り付けするのにもDecoratorが使えるし,普通はテンプレート使わずにそうする
すいません、言うべき事が抜けすぎでした・・・ 分け合って「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> このような簡単なものでもエラーになってしまいます。 理由を教えてください
ちょっと状況が良く分からないんだけど、WPFにFrameコントロールがあるので 衝突しているんじゃないかな? xmlns宣言で名前空間への参照を追加して、名前空間込みで「Frame」コントロールや そのx:Typeを指定したらどうだろう?
その自作FrameのTemplatePart属性は確認した?
>>408 ちょっと判らなかったです・・・
MSDNをみてやってみたのですがうまくいきません。
アセンブリは「PresentationFramework.dll 内」となっているので問題ないですが、
XMLNSは参照して追加しても「タグ 'Frame' は、XML 名前空間 '
http://schemas.microsoft.com/winfx/xaml/presentation ' にありません。」
となってしまいます。
色々やってみた結果、
<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
申し訳ないです。;;
コントロールテンプレートは完全に自由に書いていいわけじゃなくて, 最低限テンプレートに含めないといけないコントロールが決められてるのが普通 それを示す属性がTemplatePart 逆に,そういう条件が必要ないならあまりテンプレートを使う意味がない
>>410 ツール-オプション-テキストエディタ-xaml-その他-既定のビュー
で
「常にフルxamlビューでドキュメントを開く」
のチェックを外せば直るみたい。
でも、xaml直書きする場合、このチェックは入れておきたいよねえ。
なんか普通にバグっぽいぞ。
>>411 >コントロールテンプレートは完全に自由に書いていいわけじゃない
てっきり何をしてもいい
>>412 物だだと思っていました!
TemplatePartは詳しく調べる必要があるようです。
>>412 うまくいきませんでした・・・
どうしても「'Frame' ControlTemplate TargetType は、テンプレートの型 'PlaceHolderControl' と一致しません」がデザイナのみにエラーが出てきます。
コンパイル、ビルドも出来るので間違ってはいないと思いますが、VSのデザイナが使えないというのはキツイです・・・
WPFのデザイナは相変わらず貧弱だなぁ そこが萌えるんだけどw
WPF始めてみたいけどネット上には驚くほど資料ないねこれ・・・
InteliSenseこそ最上のヘルプ
書店にも本が並んでない すべてxamlのせいで敷居が高くなってるせいだと思う WPFだけなら新しいコントロールライブラリってことで十分普及したと思うよ Microsoftはxaml使うのをWPFが使われるようになってからに遅らせるべきだった
420 :
419 :2009/03/05(木) 17:26:32
ごめん、419の前にこれを投稿しようとしたんだ。 俺はWPF+XAMLはWindows Formsや昔のWin32APIでウィンドウ 作ってた時代よりも初心者向けだと思うよ。 本がないのも外国語の物は専門性の高い物から入門書まで多いし、 日本の出版事情が大きいんじゃないかな。
ちょっと質問! TextBlockで普通の改行入りテキストを <TextBlock TextWrapping="Wrap"> あれ?<LineBreak /> 声が<LineBreak /> 遅れて<LineBreak /> 聞こえるよ<LineBreak /> </TextBlock> こうやって作った後Blendとかに再読み込みさせると「Inline」がいっぱい引っ付いてくるんだけど、この書き方は推奨されていないから? それともBlendの屁理屈?
初心者にとっては(とっつきやすさでは) Windows Forms > WPF/XAML Windows Formsは ・XMLを編集しなくていい ・APIのデザインも直感的(使いたい機能が「そこ」にある)
>>422 WPFはWindowsFormsと同じようにAPIベースで作成できるよ。
名前が違うだけでやってることはほぼ同じ。
初心者ってのはおまえ自身のことだろ。
>>423 答えてくれてありがとう!
何かTextBlockも機能的にはとてもいいけど、Labelの方が簡単でとっつき易いなー
一般のテキスト表示にはTextBlockを使う Labelは別のコントロールに文字通りラベルとアクセスキーを付けるためだけに使う ということでおk?
Labelは一行 TextBlockは数行 くらいにしか深く考えたことないや。
GDIが早くていいよ
429 :
デフォルトの名無しさん :2009/03/05(木) 23:37:44
>>419 bindingが覚えづらい。xml的お作法としてはああなるのが正当なのかも
しれないけれど、直感に反する書き方だし、わかりづらいし、何とかしてほしい
リソースがらみもそう。
とにかくxamlで中カッコ {}が出てくる場面はうんざりする。なんなのこの変態言語
って感じで。
>>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 が言うように支援がなくて書くのが大変だし、
実行時まで間違いが分からないし、実行時の例外の内容は分け分からないしで
嫌になるのも分かる。
まともなデザイナーがVSについていればもう少し使われやすいと思うんだがな・・・・ Formsはペタこれするのはわかりやすいけれど、それ以上ができない。 WPFはそういうところがエレガントにできるけど、バインディングとか正直わかりにくい。
>>429 たしかにな
1.xaml=エレメントの画面表示
2.コード=データの操作
3.補助定義表=それらのバインディング等
みたいに分離してみたらどうなのか。3.を1.にくっつけているからゴチャゴチャになっている。
そういう定義ファイルに、
>>430 なら、
[ myViewport3D.Width <= myCanvas1.ActualWidth ]
とでも書いておけばそれ1行でOKにする。一目瞭然。初期化等も大方は
[ myWindow1.Background = Brushes.White ]
そこに記述でいいとすれば、xaml自体の方も(エレメントの単純な階層関係記述が基本になり)ごくすっきりする。
でこんなのは、システムがその表を解析して現状xamlに展開する、という形に出来る
(ものが多い、or出来るものだけをこういう初期定義可能にする)だろうから、拡張機能として比較的簡単に出来そうじゃないのか。
すいません、バインディングに関する質問です 複数のPage間でテキストデータをバインディングするとき、どうすればいいかわかりません。 名前空間などに定義する方法などが考えられるのですが、一番簡単で効率のいい方法はないですか?
このスレをマイクロソフトに教えればわかりやすい資料つくってくれるかもしれないよ
マイクロソフトのサンプルの中にWindow間でデータのバインディングをやっているのを見たのですが、 やっぱり名前空間を全てのWindowのザムルに定義している方法を取っているので、これが妥当だと思う
ProgressBarでバーをスムーズに(FormアプリのProgressBarStyle.Continuousみたいに)表示させるには Templateを弄るしかないんですか?
DataContextにオブジェクトが設定してあるとして LoadedやUnloadedイベントにそのオブジェクトのメソッドを登録したいのですが コードを書かずにXAML上だけでできますか?
ここってsilverlightの話もしていいの?
↑別スレですか ありがとうございます
誰かMSに報告 Blendにて「Hyperlink」編集不可 直タグ打ち可
お前がやれ
アカウントとるのめんどくせw エヘッ♪
xamlで記述したプログラムととC#のプログラムって 記述方法が違うだけで使ってるのは同じ.NET frameworkだから 性能とかはかわらないんだよね?
かわらん
ロードはたぶんXAMLの方が遅い ロード後の動作は全く一緒
ありがと htmlの描き方が苦手なおれはxamlじゃなくてまずC#でWPF勉強するわ
BitmapImageで読み込める画像形式を追加することはできませんか? できればアプリケーション内でローカルに追加/削除できて 他のアプリケーションには影響しないようにしたいのですが。
UriSourceプロパティを使うのはたぶん無理 自前のコードで読み込んでStreamSourceに設定するしかないと思う でもそうするといちいち他の画像形式に変換しないといけないし BitmapImageを使う意味もないので BitmapSource.Createを使ってピクセルデータから直接作った方がいい
アニメーション設定とかしてる場合、コードとザムルアニメーションはやっぱりコードの方が優先? 設定できたりする?
後で設定した方が有効になるだけだが
453 :
デフォルトの名無しさん :2009/03/12(木) 18:30:36
>>433 > 3.補助定義表=それらのバインディング等
これをデザイナのプロパティウィンドウあたりで簡単に設定できれば
xamlの中に取り込まれていても問題ないと思うんだが。
デザイナがひどすぎると思う。
結局デザイナだろ WinFormsはもっと汚い形でやってるんだから
XMLバインディングをやってみたんだけど、「存在するXMLと同期」じゃなくて、 「存在しているXMLをリソースとして利用」のほうが正しい? どうも作ってみても、EXEの中にリソースとして取り込まれて、XMLファイルの切り替えとかが出来ないw RSSの仕組みでネットワークにあるものを指定してやると、切り替えとかをネットワーク越しに出来るけどローカルでは無理な感じ。
ごめん嘘、忘れて
ポカー
RichTextBox に Wordwrap プロパティがないんだけども、 改行しないで表示させたい場合どうしたら良いの?
TextBoxでいいんじゃね? RichTextBoxの中にあるFlowDocumentだっけか、 あれにパネルとか突っ込んで見たんだけど、どうもスクロールバー自体がテキスト扱いになって操作できないし。
>>458 http://msdn.microsoft.com/ja-jp/library/system.windows.controls.richtextbox.aspx > RichTextBox ではテキストが常に折り返されます。
> テキストの折り返しが不要な場合は、FlowDocument の PageWidth を RichTextBox の幅より大きく設定します。
> ただし、この場合も、ページの幅に達するとテキストが折り返されます。
なので、
<RichTextBox><FlowDocument PageWidth="300"/></RichTextBox>
<RichTextBox><FlowDocument MinPageWidth="680" MaxPageWidth="1024"/></RichTextBox>
みたいに、適当に大きな幅を入れておくとか。
ただ、横スクロールバーを表示すると、最初からスクロールできる状態になってしまうのが難点だけど。
後は、イベントで動的に幅を測定して FlowDocument.PageWidth に反映させるとか。
461 :
458 :2009/03/14(土) 23:04:06
WCFおもしろいな。しかしスレはない
>>462 特に旧来のWindowsForms、これからのスタンダードなWPF、XBAP、Silverlight、そして携帯電話や汎用
ブラウザ向けのASP.NETなんかで相互に共用できるアプリケーションシステムの構築となると、
やっぱりWCFは欠かせないよね。
俺の場合、データ・レイヤはSQL Server、アプリケーション・レイヤは機能・役割ごとに複数個のWCFで構築。
プレゼンテーション・レイヤは、WinForm、WPF、XBAP、Silverlight、Javaでマルチクライアント環境を実現。
今はこの基本3層構成をWebサービスのマイブームと位置付けて色々と遊んでいる。
重要度的には Silverlight>WPF>XBAP な希ガス。
>>465 XBAPはSilverlightへの発展的解消で完全に進化が止まっちゃったからね。
Silverlightは資料もチュートリアルも豊富。WPFとの2本立てで決まりだね。
そういえば、MIX'09でSilverlight 3の発表ですな。
ブラウザナビゲーションとの連携が目玉らしいけど、それよりTextBox上での
右クリック時にコピペ系のコンテキストメニューを出すようにして欲しいな。
もうSliverlight3の発表ですか、これは楽しみ。 ついでにBlendも改善バージョンを発表してもらいたいですね。
Silverlightで書かれたサイトって一発でわかる?
インストールを強制されるからね
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で標準搭載してくれれば・・・
でもC#のプログラムって商用にしにくいよね 割と簡単にソースを推論できるから
>>471 情報システム系の業務アプリには向いているよ。
オンライン販売やパッケージ販売のソフトウェア制作には向かないかも。
商用≠開発したソフトウェアの製品マスターのコピーを販売する
商用=商用の設備・ツールとしてソフトウェアを稼動させる
難読化してありゃ十分じゃね? 客先で難読化されてた奴見たけど中身を見る手間相当あがると思うけど。 動作のわかる所からクラス機能を推論して意味通る名前を当てはめるにしても全体の把握は大変そう。 一部のロジックがわかれば良くてそこだけピンポイントで調べるのには向かなそうだが。
VisualStudioに組み込んでくれないかな 難読化
商用というかメーカー製PCのバンドルソフトでも.NET利用がちらほら見かけるようになったが、 大抵ネイティブモジュールとのハイブリットだしな。
ネイティブと混ぜたらネイティブ部分はちゃんとブラックボックス化するのか? あと自作したlibやdllを混ぜたらリコンパイルきかないだろう さすがに機械コードを読んで作るやつはいるわけないし
GUIだけ.NETって感じ?
C++で書いてあるコードでも、UI部分のように、そのほとんどがAPIコールのものは解読は容易。 だいいち、そんなに解読されて困るコアのアルゴリズムがあるんだったら、それはサービス化 してSaaSで提供するとか考えるべき。
479 :
デフォルトの名無しさん :2009/03/19(木) 21:20:25
ItemTemplateプロパティで
>>479 TabItem.Header に Image を指定する。
<TabControl>
<TabItem>
<TabItem.Header>
<Image Source="example.jpg" Stretch="None"/>
</TabItem.Header>
....
</TabItem>
....
</TabControl>
482 :
デフォルトの名無しさん :2009/03/20(金) 07:25:57
481>> ありがとうございます。 「ファイル example.jpg はプロジェクトの一部ではないか、'Build Action' プロパティが 'Resource' に設定されていません。」 となります。Resource設定はどのように行うのでしょうか。
WPFの窓の中にopenglで描画したり,WPFの窓をC++で使うことは出来ますか?
WPFは4.0でよくなるのかなー Form,Silverlight,WPFどれがどうつかわれてくのかいまいちさきがみえん。 Silverlight3.0とかかなりよさげで環境を問わないWeb,デスクトップ含めたUIフレームワークとしてかなり有望そうだが。
機能もだが、XPで4.0がサポートされるのかどうか不安だ。 グラフィック関係の新規APIはほとんどVista以降のみ対応だからなあ。
SGMLは<tag> </tag>ではなく[tag][/tag]にすべきだった <>入力するときにShiftがめんどくさいです><
490 :
デフォルトの名無しさん :2009/03/21(土) 08:04:07
491 :
デフォルトの名無しさん :2009/03/21(土) 09:30:52
WPFって時期尚早と思わない? 初心者が取っ付くには敷居が高すぎる。 ウインドウズフォームとちがって単純に貼り付けて プロパティを操作するだけではだめだ。 インテリセンスも効かないXAMLファイルを操作しなくては ならないし。
時期尚早だよ。だからこそ楽しい。
そういうこと。F#もいい。
494 :
デフォルトの名無しさん :2009/03/21(土) 14:23:11
少なくとも生産性は低いな
確かWPFってデュアルコア6GHz時代を想定して作ったんじゃなかったっけ?
どう考えても、XAML + C# の方が生産性が高くないか?
WinFormよりXAML+WPFの法がよほど効率的だな。
DataGridViewさえ充実していれば…
次期バージョンを待て
501 :
デフォルトの名無しさん :2009/03/21(土) 17:56:52
生産性を高くするためのフレームワークなんだから、低かったら使う意味ないじゃん。
XAMLでUIの階層分けを意識して記述できるし、 アニメーションさせなきゃならない部分があっても気軽に書ける。
WinFormsはデザイナでコントロールの親子関係を変更するのが面倒だったな その点、WPFはXAMLを少し書き換えるだけなので楽だ
ポトペタ以上のことやろうとしたらWinFormsは簡単に破綻するでしょ。
XAMLはコントロールの親子関係もプロパティもすべて一覧で把握できる。
UIの柔軟性とソースでの視認性の双方のバランスがいいよなXAMLは これに関してはWinFormとは段違いでいいと思う
C#とxamlとで相互変換できるならVSでボタン一つで切り替えるようになるといい それぞれのいい所取りできれば最高
C#の利点(リファクタリングとか)がXAMLでも完璧に使えたらとは思うが、 そのアプローチには無理があるだろう XAML→C#は可能だろうけど、 C#→XAMLはC#のコードがXAMLに埋め込まれる事になりそう
>C#→XAMLはC#のコードがXAMLに埋め込まれる事になりそう これに関してはマイクロソフト様より「技術的には可能だが非推奨」という 実務ガイドラインの見解を戴いております。
コードが埋め込まれたとしても、そんなところには見向きもしないでxamlで見やすいところだけ編集するんだから無問題
XAML編集でちゃんとインテリセンスが効けばいいんだけどねえ。 この辺もVS2010で改善されるのかなあ……
>>514 {Binding }にもインテリセンス効くようになるらしいよ
エディタも十分高機能化するそうだけど
VS2008でその水準に達していなかったのが最大の失策
>>515 >{Binding }にもインテリセンス効くようになるらしいよ
これはかなり嬉しい。
そういや、WPF Toolkitも標準で入るとか聞いたが…。
Windowsライクな外観を作りにくい
519 :
デフォルトの名無しさん :2009/03/25(水) 20:42:17
なんでWPFでウィンドウの外枠とかタイトルバー弄れないようにしたんだろ。 P/InvokeかWindowStyle.None使えってAnderson神父は言うけど面倒臭いよ面倒臭いよ
・C#は知ってる。 ・XMLは知ってる。 ・Windows Formは未経験。 この条件でいきなりWPFの勉強を 始めることは可能?
余裕
>>519 <r:RibbonWindow x:Class="Window1"
</r:RibbonWindow>
リボンUIのWindowはこんな感じで実装されてるな
System.Windows.Controls.UserControl の再描画を抑制する方法ってありますか? 複数のプロパティを連続して変更する際に、変更するごとに再描画されるのを 回避したいんです。
LayoutRooからいったんRemoveし、プロパティを設定後Addするとか
印刷プレビューダイアログはどこにあるの?
System.Printing
ってPreviewの方か ないんじゃないかな 作ったFixedDocument表示すればそれがPreviewになるし
VS2008 ExpressでWPFをかじったんだが、 WinFormと比べてデザイナがまだまだ発展途上ですね。 Web上に日本語の情報も少ないし、どうしようか。 みんなどんな開発環境でWPF遊んでる?
春休みだな
はるかな尾瀬ー
>>531 それは夏では
夏がくーれば思いだすー、
やっちまったぜ♪
ののこみちー
日本語の情報待ってろ
英文のドキュメントも読めない奴がこんな発展途上の分野に手を出すなと小一時間 まあ、英語でも情報少ないんだけどなw
WPFはなくなるの? 答えはもちろんNO!
1年後くらいに、Full Trusted Silverlight Applicationとかが発表されて、 トドメを刺されるような気もする。まうその方向なら今やっといて損はない気はするけどね。
ブラウザ上でFullTrustedなんてActiveXの二の舞だし 結局ローカルにインストールベースになると思うんだが そうするとそれってただのWPFじゃん
WebでWPFは流行らないだろうなぁ。 世のスキル的にもWebはPHP、Java、ASP.NETだし。 今時点で情報の少なさが普及しないってことを物語ってる。 とはいえ、デスクトップ分野ではWindowsFormはWPFに間違いなく移行する。 WPF学ぶなら情報の出そろった3年後が良いよ。
世のスキル的にも・・って WPFはPHP・Java・ASP.NETの代替になるような物じゃないのだが・・・。 Silverlightの話としても、比べるべきはFlex, JavaFx (, Flash, Java Applet)じゃないか?
Flex, JavaFx, SLのRIA plugin組が対峙するのはAppleやGoogleが推すHTML5
Webのクライアントはブラウザで事足りる?
あれ、AppleもなんかFlash的な何か作ってなかったっけ?
洋書でWPFのお勧め本は何?
MSはxaml無視してWindowsFormの後継としてWPFを積極的に広めるべき 十分広まった後でxamlもちだせばOK
XAMLのないWPFなんてw
なんで?俺xamlなしでやってるぜ?
まさかXAMLを使った事がないのに、XAMLイラネって言ってるわけじゃないよな?
そだよ?xamlわかんねーもん
XMALなしのWPFプログラムは全部DOM使ってHTMLを記述するようなものだよ。
それだと「頑張れ」としか言えないじゃないか・・
全部C#でやるなんてすごいな。俺にはやり方がわからん。
557 :
デフォルトの名無しさん :2009/04/01(水) 03:59:34
>>329 を参考にして、MainWindow()内に
Image myImage = new Image();
myImage.Width = 200;
BitmapImage myBitmapImage = new BitmapImage();
myBitmapImage.BeginInit();
myBitmapImage.UriSource = new Uri(@"D:\Unko\My Pictures\Images\hoge.jpg");
myBitmapImage.DecodePixelWidth = 200;
myBitmapImage.EndInit();
myImage.Source = myBitmapImage;
を入れて(内容は
ttp://msdn.microsoft.com/ja-jp/library/ms747027.aspxのものです )
実行してみたのですが、真っ白なウィンドウが出るだけで画像が表示されません。
どこがいけないのかわかりません。どう書けばいいか教えてください。
558 :
557 :2009/04/01(水) 07:04:31
自己解決しました。 最後にthis.Content = myImage;を追加するだけだったとは…。
560 :
デフォルトの名無しさん :2009/04/01(水) 19:29:06
.NETでGUIプログラミング始める人ってかわいそう。 Windowsの仕組みも知らずにプログラミングして何が楽しいことか。 ま、今に始まったことじゃないけどね。VBとかDelphiもそうだけど。 VC++でWindowsAPI駆使した方が間違いなく素晴らしいアプリ作れる。 もっとも、WindowsAPIは把握するまでが大変だけど。 .NET使った方が楽なところは、マネージコード使って、 それ以外はアンマネージで。使い分ければスタンドアロンWPFいらないぜ! とここまで書いてて気になったが、VistaでWinFX(.NET)が見送られたけど、 いつの日か、WindowsAPIは、.NETで公開されるように置き換わるのかなぁ。 WPFの目指すところがイマイチわからない。
釣られないよ
突っ込みどころが色々あって釣られたくなるw
横からだけど気になるので突っ込みきぼん
System.Windows.Controls.Canvas の継承したクラスを作って、 OnPreviewMouseLeftButtonDown をオーバーライドしました。 Canvas の Children に設定したコントロールをクリックしたときは イベントが発生したんですが、新しく作成したコントロール自身を クリックしたときはイベントが発生しません。 MSDN で UIElement..::.OnPreviewMouseLeftButtonDown メソッドを見ると 「派生クラスの静的コンストラクタ内で、Mouse..::.PreviewMouseDown の 代替クラス ハンドラを登録します。 OnPreviewMouseLeftButtonDown オーバーライドして UIElement のマウス処理動作を変更することはできません。」 とあるんですが、関係あるんでしょうか? OnPreviewMouseLeftButtonDown を OnMouseLeftButtonDown に 変えても同じでした。 自分自身をクリックしてもイベントが発生するようにするには どうしたらよいのでしょうか?
そいじゃまず俺から突っ込んでみる。 後ろから ズボッ ! とな。 Windowsの仕組みを知る楽しみ ≠ プログラミングの楽しみ それにプログラム完成までの最短・最良の道を選択するのは 世間では常識で普通のことだよ。
>>546 希望する内容を言ってくれた方が紹介しやすいが、
Pro WPF in C# 2008
Pro WPF with VB 2008
なんてどうだろう。
一通り最初からゆっくり読んで実験していけば、
エッセンスは頭に入ると思う。
英語も平易て読みやすいし、情報量の割には価格も安い。
ただし、ページ数がハンパないが
(C# 版しか知らないが、目次を見る限りは VB 版も同内容だと思う)
>>564 Panel は子を入れて使うのが前提だから Background が設定されていないとクリックイベントが呼ばれないみたいだね。
<l:MyCanvas Background="Transparent"/> としても良いから Background を設定してみたら?
569 :
564 :2009/04/01(水) 22:52:57
>>568 ありがとうございます。
助かりました。
Background を設定しなければならないなんて考えもしませんでした。
ところで、Background を設定しないとイベントが発生しないと
どういう方法で調べたのですが?
よろしければ後学のため教えていただきたいのですが。
>>567 レスどうも。
確かにそれ1000ページ超えてるんだよね。
600ページくらいだったら即決なんだけど、
検討してみる。
>>570 Proシリーズか。
Linqが良かったから、Silverlight2も気になってる
573 :
568 :2009/04/02(木) 00:03:56
WPFアプリケーションを作成してみようと思っているのですが、 最初のウィンドウが表示できなくて困っております。 手順は以下の通りです。 ・新しいプロジェクト画面でWFPアプリケーションを選択 ・ビルド ・実行 多分この時点でウィンドウが表示されると思うのですが、何も立ち 上がらずに実行を終了?してデバッグ実行モードを抜けてしまいます。 そこで、Window1.xaml.csのコンストラクタにブレイクを仕掛けてみたのですが、 どうやらインスタンス化されていないらしく停止しませんでした。 プロジェクトのスタートアップオブジェクトの設定を確かめ、 自動生成されるApp.g.cs内のMainメソッド内にブレイクを 仕掛けてみたのですが、こちらでも停止しませんでした。 どうやら根本原因はMain()が呼ばれていない事のようなのですが、 どのように解決すればよいかわかりません。 もしよろしければ解決のためのヒントをいただけませんでしょうか・・・。
VS2008か? 環境を書かないと
576 :
574 :2009/04/02(木) 01:34:49
>>575 すっかり抜けていました、申し訳ありません。
OSは XP の SP3を適用済みで、VS は
Visual Studio 2008 Express Editionです。
うちVistaで同じ手順で普通に実行されるのであんま力になれないけど プロジェクトフォルダの bin と obj を削除して再ビルドしてもダメなら Visual Studio を再インストールしてみたらどうだろう
578 :
574 :2009/04/02(木) 02:00:35
.NET Frameworkのバージョンが3.0未満とか、そういうオチはないだろうなw
580 :
574 :2009/04/02(木) 02:16:31
プロジェクトのプロパティーを確認しましたが、 「対象のフレームワーク」の項目は3.5になっております。
ビルドに成功してるなら実行環境の問題っぽいけどな・・・ Windows Forms Applicationなら問題なくビルドして実行できるのかな?
582 :
574 :2009/04/02(木) 03:14:19
>>581 確認しましたらWindows Forms Applicationでも同じ症状がでていました。
これからVSを再インストールして試してみます。
583 :
デフォルトの名無しさん :2009/04/02(木) 13:27:19
>>583 FlexとかAirとかじゃね?
まあ開発環境としてはMSより程度が低いよね。
585 :
デフォルトの名無しさん :2009/04/02(木) 14:07:52
>>584 それ、AppleではなくてAdobeじゃん。
>まあ開発環境としてはMSより程度が低いよね。
はぁ?
というか、お前自身の程度が低いだけだろ。
釣られんなよ
AIRのような継はぎのマッシュアップがいつまで持つやら。
>>584 Adobeの開発環境よりMSのVSシリーズが劣るところを詳しく。
まあ程度が低い君に比較する事なんて無理だよね。
ん?
春
春ですなぁ…。
自演
アンカーミスだか誤読だか知らんがこれは恥ずい
ラーメンマン
今日温かいなぁ…
597 :
デフォルトの名無しさん :2009/04/02(木) 17:06:00
Adobeの開発環境よりMSのVSシリーズが劣るところを詳しく。 まあ程度が低い君に比較する事なんて無理だよね。 \___________/ ___ _ / ____ヽ /  ̄  ̄ \ | | /, −、, -、l /、 ヽ きみ頭だいじょうぶ? | _| -|○ | ○|| |・ |―-、 | , ―-、 (6 _ー っ-´、} q -´ 二 ヽ | | -⊂) \ ヽ_  ̄ ̄ノノ ノ_ ー | | | ̄ ̄|/ (_ ∪ ̄ / 、 \ \. ̄` | / ヽ ` ,.|  ̄ | | O===== | `− ´ | | _| / |
598 :
デフォルトの名無しさん :2009/04/02(木) 17:49:13
いつになったらWinFormsを超えられるんだ? 工数増加たまらんね
599 :
デフォルトの名無しさん :2009/04/02(木) 22:08:14
>>553 HTMLはぽとぺたですむからこそ、表現系がDOMだろうがHTMLだろうが
どうでもいいわけで。
手でがりがり書かなきゃいけないならどっちでも一緒。HTML内に全部
書かなきゃいけないのはむしろ地獄。ajaxなんて地獄の生産性の悪さ
ってこった。
ajaxとhtmlって関係あんの?
601 :
564 :2009/04/02(木) 22:52:06
>>573 基底クラスのドキュメントかぁ・・・
勉強になりました。
ああもう、ここは俺のチラシの裏だ
ググってもほとんど個人のウンコblogしかでてこない 全世界のウンコエンジニアのウンコ記事ばかりだ お前の意味不明な忘備録を全世界に公開するな 公開するならせめて意味のわかるものにしろ、この糞どもが ふぅ、すっきりした ほんと、こんな情報ばっかりなんだよなw 俺のウンコを拭くチラシの裏終了
UserControl を作成して、XAML で定義した StaticResource を コードビハインドで使おうと思います。 > StaticResourceExtension ex = new StaticResourceExtension(); > ex.ResourceKey = "HatchBrush"; > Brush brush =(Brush)ex.ProvideValue( XXX ); ↑のようなコードで使えそうだってことはググった結果わかったのですが、 XXX になにを入れれば良いのでしょうか?
俺んちに落ちてこないかなー
そもそも、WPFうんぬん以前に.NET Frameworkでコード書ける人間が 俺一人ってどういうことだよ、この職場wwww なんかもう、OOPについていけないSEがその辺にごろごろいる コーディング?VBなら一通りできますよ?みたいな。もう死ねよ
608 :
604 :2009/04/04(土) 00:49:05
>>605 IServiceProvider の使い方がわからないわけでなく、
UserControl を継承したクラスのなかで、どうやって
IServiceProvider を得るのかがわからないんです。
>>607 お前みたいなのでも雇ってるんだから
ずいぶん寛大な会社だと思うんだが。
>>608 多態性(polymorphism)というOOPの概念を知ってるか?
というか、インターフェイスの使い方がよくわかってないんだろう・・・
俺の職場にゴロゴロいるやつらと同じだwww
C++では多重継承は変態コーディングで害悪だ、みたいな空気があったけど
C#では標準ライブラリからして、インターフェイスを使った多重継承が常識になってるんだよ
>C++では多重継承は変態コーディングで害悪だ、みたいな空気があったけど アホが使うとな。
もうだめかもわからんね
>>610 インターフェースと多重継承ごっちゃにすんなよ。
区別がついてない時点でおまえもその職場の奴らと同類だ。
616 :
604 :2009/04/04(土) 18:08:22
>>611 教えていただいた方法で無事リソースを得る
ことができました。
ありがとうございました。
小賢しい暴言書きちらすような奴は
>>610 結局手前が一番何もわかっていない糞馬鹿だということの典型モデルですな
要素に対するシステム特有の扱いへの質問にすぎんものに
>多態性(polymorphism)というOOPの概念を知ってるか?
もう痛さ百乗
618 :
デフォルトの名無しさん :2009/04/06(月) 12:30:35
>>610 最後2行はネタであると願っております。
>>610 は間違いなのか?
結局何が答えなのか・・・
>>610 はOOP概念に拘ってるようですが、
プログラミングの基本は抽象化です。別にOOPに限った話ではありません。
インタフェースは使い方はそれほど重要ではなく(簡単なので)、インタフェース
という実現方法が問題解決の副次的要素です。
多重継承問題は、抽象化プログラミングと深く関わっています。
このまま解説を続けても良いですけど、WPFスレなので
スレ汚しになるので控えさせてもらいます。
構わん、続け給え。
私の貴重な時間を奪わないでください。
ピタゴラスイッチの「ぼくのおとうさん」という歌が、何気にインターフェースの概念をよく表しているよな。 お店にはいるとお客さん、歩いていると通行人。でもインスタンス(おとうさん)は同じ。
>>610 の人気に嫉妬w
いまごろ泣いているんだろうなぁ
ねーよw
大きいです
629 :
デフォルトの名無しさん :2009/04/08(水) 02:51:59
WPFおもれーな、しかしAtom270ではデバッグ後の復帰がおもてーwww
>>629 VSのスタートアップページ(RSSとかプロジェクトとかが表示されてるタブ)を閉じておくと
なぜか復帰が早くなることがあるよ
むしろ、なぜかスタートアップページを表示しておくととてつもなく時間がかかる
なんでこんな無駄なページが毎回起動時に表示されるのかが分からん
>>629 どうやって楽しんでる?満足に理解できないでしょ?
633 :
630 :2009/04/08(水) 17:07:09
>>631 トンクス、スタートアップページは閉じてみます。
>>632 そうだね、まだWPF/XAMLの国内本を3冊と、
MSDNしか読んでないしな〜。
WindowsFormの代替品としてテストしてるけど、
ユーザーコントロールを簡単に部品として作成できるの嬉しい。
>>633 俺はWPF関連の情報はネットを中心にかき集めてるわ
評価版リボンUIつけられて、アプリボタンのStyle書き換えもうまくいったけど、評価版だからやっぱり不安定だわ。
2010が待ち遠しい
635 :
630 :2009/04/08(水) 19:01:21
>>634 おれは情弱だからWebでいい資料を探す技術がないんだよ〜。
それはさておき、VS2010とBlend3.0は気になる!
Blend3.0はどうでもいいけど、VS2010は買いだな。 VS2008はWPFの開発環境がまだまだ発展途上だもん。 2010になると強化されるらしいが・・・。 今別なこともやってて、VS2008買おうか迷ってるんだが、 来年VS2010が控えてるからなー・・・。今2008買っても損しそう。 2010買ったら数年使い倒せると信じたい。
637 :
デフォルトの名無しさん :2009/04/08(水) 22:14:06
一年前と比べるとちょっと賑やかになってきたな あと2年ぐらいたてば主流になれるのかな
早くても3年以上はかかるだろうな
639 :
デフォルトの名無しさん :2009/04/09(木) 01:55:23
WPFのサブセットのSilverlightを使ってしまうと、 もはやHTML+css+Javascriptなんてやりたくなくなるな。
やりたくならなくならないのか
>>641 そういう買い方(レンタル)もあるのですね。
マイクロソフトのサイトを確認しても価格が見つかりません。
1年分でいいのでサブスクリプションしたいなぁ。
644 :
デフォルトの名無しさん :2009/04/09(木) 14:07:42
エッセンシャルWPFは初心者向きですか?
>644 初心者って言うか、最初に通しで読んで、設計思想とか、 何でそうなってんの?って部分について「へー」と納得する為の本。 後でリファレンスマニュアルとして読み返すような部分はない。
646 :
デフォルトの名無しさん :2009/04/09(木) 14:58:19
>>645 レスthxです。
Pro WPF買って読んでるんですが、ちょっと難しいなと感じています。
WPFに馴染んでおくという意味で、エッセンシャルWPFを
先に読んでおくとProも理解しやすくなりますかね?
入門本としては黒い表紙のXAML本がおすすめかな。 APIだけでやりたいなら赤坂本があるけど、 WPFの威力が半減以下にw エッセンシャルは黒XAML本の後に読んだ方が理解が早いかな、 内容自体はかなり重複してるけどね。
黒xamlじゃわかんねーよ WPFの本、店頭に並んでないんだから
アマゾン XAML でググれば一番上に出てくるよ。
お前、いいやつだな、惚れた
いいのかい?そんなにホイホイ惚れちまって・・・
652 :
デフォルトの名無しさん :2009/04/09(木) 16:19:27
>>647 thx
本屋で黒XAMLを見てみます。
本題なんか?みに行けば軽く吹き飛ぶぐらいなもんなんだから気になったのはどんどん買っとけ かぶったなら後輩にあげろ
XAMLは@ITの連載記事でなんとかなった。
有名どころのサイトだと、The Code Project のサンプル群が役に立つ。 あと Dr.WPF とか。本はエッセンシャル WPF が良かった。 XAML を書いてると、オーサリングソフトなしで HTML を書いてる気分になるが、 慣れれば GUI ポトペタより手書きの方が楽だね。 VS 2010 では、XAML 中の Binding などにも、インテリセンスが効くようになるそうだから、 ますます手書きが良くなるな。
winformレベルのポトペタ環境にした程度ではWPFはカバーできないってだけの気も
なんかあれだ。Blend 併用したほうがいいんじゃないか みたいな気がする。VS 持ってるなら高くないし。
ブレンドみたいなフリーソフトが出てきたら本気出す
作ろうと思った時期があった。 インテリセンスの実装ができなくて挫折した。 (その前に入力したコードに色つけんのもね。実装してみたけどさすがにもたつきすぎで、バグりすぎで)
Win32→COM→.NETLib→WPF/XAML
Dependency Propertyが難しい。。 いきなり詳細を見るのは無謀かな。
UserControl をつくって、そのなかに Rectangle を配置しました。 enum Level { Low, High }; を作成し、Level という名前の DependencyProperty を作成しました。 で、Level に応じて Rectangle の色を変えようと思い、 <Rectangle> <Rectangle.Style> <Style TargetType="{x:Type Rectangle}"> <Style.Triggers> <Trigger Property="local:Usercontrol1.Level" Value="High"> <Setter Property="Rectangle.Stroke" Value="Red" /> </Trigger> <Trigger Property="local:Usercontrol1.Level" Value="Low"> <Setter Property="Rectangle.Stroke" Value="Blue" /> </Trigger> </Style.Triggers> </Style> </Rectangle.Style> </Rectangle> としたところ、コードビハインド内で、Level を変更しても Rectangle には 反映されませんでした。 どこが問題なんでしょうか?
>>663 DataTriggerでElementNameとかRelativeSourceとか使ってUserControl1のプロパティを参照するバインディングを使う
Trigger.Propertyは基本的に自分自身のプロパティが対象だよ
665 :
デフォルトの名無しさん :2009/04/13(月) 02:07:34
GridSplitterの挙動で質問です。 現在GridでRowを12、Columnを2で区切り、 それぞれ下記のように使用しております。 <Canvas Grid.Row="0" Grid.Column="0" Grid.RowSpan="12"/> <Canvas Grid.Row="12" Grid.Column="0" Grid.RowSpan="3"/> <Canvas Grid.Row="0" Grid.Column="1" Grid.RowSpan="7"/> <Canvas Grid.Row="7" Grid.Column="1"/> <Canvas Grid.Row="8" Grid.Column="1"/> 見かけはVSの配置と似たような形になります。 そこでそれぞれのペインの幅や高さを調整したい為に、 GridSplitterを使用して境界を作成しました。 <GridSplitter Margin="1" Height="5" Grid.Row="0" Grid.Column="0" Grid.RowSpan="12" VerticalAlignment="Bottom" HorizontalAlignment="Stretch"/> <GridSplitter Margin="1" Width="5" Grid.Row="0" Grid.Column="0" Grid.RowSpan="15" VerticalAlignment="Stretch" HorizontalAlignment="Right"/> このGridSplitterのうち、最初に作成した方がドラッグしても 設定が正しくないらしくまったく移動しません・・・。 よくない箇所などございましたらご指摘くださいませ。
666 :
デフォルトの名無しさん :2009/04/13(月) 07:45:48
開発ツールだとか開発フレームワークでお作法が難しいのはかまわない いずれ慣れる。しかし概念が難しいもんはいずれ廃れる。 wpf/xamlはどうも後者のような気がするんだがなあ。
MSDNってわかりやすい? プログラミングはじめたばかりなこともあってか、内容読んでてもなんか理解しづらい。 階層も複雑だし。
他の情報サイト見に行くようにわざと読みにくくつくってある ユーザーサポートがめんどくさいから
わからんとむかついたときは、フィードバック書いてる
MSDNはリファレンスとして以外は使えん。リファレンスとして使う場合も、日本語版は 意味不明な訳語のせいで読んでもさっぱり判らないことが結構多いので、 英語版と両方当たるべし。 入門記事やTipsは、日本語に拘らなければネット上に無料でいっぱい転がってる。 まぁ、ようするに、日本で人気が出ていない技術を触るなら、英語で探せってこった。
.NETの訳はなかなかいいよ。 Win32APIの訳がクソなのは同意だが。
Win32APIは訳がクソ以前にそもそも存在してないの多数だからな…
673 :
663 :2009/04/14(火) 10:37:47
>>664 DataTrigger を使用して無事動作させることができました。
ありがとうございました。
(アク禁喰らって書き込みが遅くなってすみません)
親のCanvasの幅を取得して、子であるGridの幅とする処理を考えております。 テストは下記のようにして行いました。 <Canvas Name="canvas0"> <Grid Width="{ Binding ElementName = canvas0, Path = Width }" ShowGridLines="True"> . . . </Grid> </Canvas> バインディングで解決しようと試みたのですが駄目なようです。 もしよろしければアドバイスをいただけませんでしょうか・・・。
ActualWidthじゃないと意味無いんじゃない? CanvasのWidthは未指定みたいだし。
>>675 ActualWidthで無事解決できました。
ありがとうございます!
それCanvas使うのが間違いだろ Grid使うべき
GridのLine描画がどうもよろしくないので、Canvasに線を描画して 上のGridをレイアウト目的のみに使用しようと思っております。
System.Windows.Controls.Primitives.MultiSelector を実装した サンプルってどこかにないですか?
680 :
デフォルトの名無しさん :2009/04/17(金) 22:48:32
>>633 > そうだね、まだWPF/XAMLの国内本を3冊と、
3冊って、何の本読んだのでしょうか?
てゆーか国内本3冊ぐらいしか無くねーか
682 :
デフォルトの名無しさん :2009/04/18(土) 10:37:28
>>681 エッセンシャル WPF
XAMLプログラミング
WPF 3Dプログラミング
こんなところ?
あとはamazonで評判の悪い本がちらほらあるけど。
そんなかだとエッセンシャルが一番mともだな
そうなのか
レイアウトなんだけど、コンテナを層にすることってできる? 奥はコンテンツを表示するCanvasコンテナで、手前はコントロール類を置くDockPanelコンテナ で、DockPanelのほうは使わないときは半透明にして奥のCanvasのコンテンツが透けて見える って感じにしたいんだけど。
WPF のデバッグ中に強制終了を繰り返すと、 デスクトップ・アプリケーション・ヒープが枯渇するらしく、 コンテキストメニューの表示がおかしくなるんだけど、 なんか対策ある?
vshost削除すればいいんじゃないか
WPFって気持ちいいよね Binding多用して完全にXAMLだけで再現できたときとか
<Border ...> <StackPanel> ・・・ </StackPanel> </Border> てな感じに入れ子になってると、スタックパネルの領域がウィンドウ幅いっぱいまで 広がってくれないんだけど、いっぱいまで広がってくれるにはどうしたらいいの?
試しにウィンドウを1つ作って、ウィンドウの中身を <Border> <StackPanel Background="Black"> </StackPanel> </Border> としてみたら、ウィンドウ全体が黒くなったけど?
>>692 あれれ、ほんとだ。スマソ
BorderをCanvasに変えてくだされ。
画像ソフトのレイヤ機能みたいに、幾層にも重ねてみたい
(レイヤごとに別のXAMLファイルに分けられればうれしい)けど、
さっぱりわからんなも。
前にも出てたけど、親要素のサイズに合わせたいなら、CanvasじゃなくてGridを使うんだよ <Grid> <StackPanel Panel.ZIndex="1"/> <StackPanel Panel.ZIndex="2"/> </Grid> レイヤをユーザーコントロールにしておけばXAMLをファイルに分けることもできる
WPFでコンソールアプリケーションつくれないの?
>>696 コンソールアプリケーションとはちょっと違うが、
ASP.NETと一緒に使って、サーバサイドでの画像生成に使ってるよ
>>697 主旨はともかく
サンプルコードはbeta時代の書き方ゆえ相当使い物にならんので
買う人は覚悟して。
DataTrigger で特定の Rectangle だけ色を変えようと思って、 TargetName を指定したら、Style では TargetName は指定できないという エラーが出てしまいました。 回避する方法はありますか?
当のRectangleのStyleに書けば良い
702 :
シロウト :2009/04/21(火) 19:32:19
client XBAP から serverにあるファイルを読みたいのですが、 簡単な方法ない?
703 :
シロウト :2009/04/21(火) 19:58:13
すんません、WebClient でウンコでした。
704 :
700 :2009/04/21(火) 21:27:16
>>701 レスありがとうございます。
説明不足ですみません。
色を変えたい Rectangle が6個あるんで、その方法だと6か所に書かないといけません。
バインドする値はひとつですが、色は個別に指定したいと思います。
CLRオブジェクトとのバインディングで、 判りやすい記事を紹介していただけますでしょうか・・・。 よろしくお願いします。
レイアウト?についての質問です。 コントロールの大きさ指定で割合で指定し、親の サイズが変わっても柔軟に幅や高さを割合で、 変化させられたらと思っています。 ひとまず書いてみましたが、下記のような width指定は出来ないようでした。 <StackPanel> <Label Width="32">H:</Label> <TextBox Width="1*"/> <Label Width="32">W:</Label> <TextBox Width="1*"/> </StackPanel> 代替案としてGridを使用していますが、ソースが膨らむ 傾向にあるため、どうにか解決できればとおもっております。 もしよろしければ良い解決策などをいただけますでしょうか・・・
> ソースが膨らむ ColumnDefinitionを沢山書くのが嫌って事か? だったら、Gridのコンテンツを元にColumnDefinitionを生成するコードを書けばいいじゃない。
>>704 WindowとかのリソースにStyle宣言してTargetTypeでRectangle指定すればいいじゃない
個々のRectangleで更にStyleを追加するならBasedOnで指定すれば良い
>>707 早い話その通りです、細かいレイアウトの為にいたるところでGridを書くのが面倒だなと。
できればXAMLのみで解決できたらと思っております。
質問です。 XAMLで"Width=Auto"をコードで書くとどうなるんでしょうか?
UIElement.SetValue(WidthProperty, "Auto") でいけないかな?
コンバータとおさにゃダメよ ってかWidthの解説読めばAutoがなんに該当するか書いてる
>>710 contentが必要とする大きさになるんでないの?
違った?
それは測定フェーズでの動作の話。 XAMLから設定した時点でcontentが必要とする大きさに変換されているわけじゃない。
リサイズグリップってどうやれば握れるようになるのかな? コード的には下記のように書いたら描画はされますが、 グリップ表示部分をクリックしても握ってリサイズできません。 <Window ....中略> <Grid> <ResizeGrip></ResizeGrip> </Grid> </Window>
WindowのResizeModeを設定するのでなくResizeGripをカスタマイズしたいの?
719 :
デフォルトの名無しさん :2009/04/28(火) 22:34:04
GridViewにコードから行を追加すればどうすればいいか教えてもらえると助かります。
>>697 オーム社から出てたのか・・・
なんでオライリー出さないのか不思議だった
722 :
デフォルトの名無しさん :2009/04/28(火) 23:36:09
GridViewのAddメソッドに目的のエレメントをnewしたものを指定するとよろしい。
723 :
デフォルトの名無しさん :2009/04/29(水) 00:28:30
Addメソッドないです
ちっとは無い頭使わんかい
725 :
デフォルトの名無しさん :2009/04/29(水) 01:37:43
ListViewのItemsSourceに設定したコレクションにAddするんだ
727 :
デフォルトの名無しさん :2009/04/29(水) 02:19:46
なんかわかった風な感じで人バカにしてるけど 722と726で言ってること違うな
これと違うのか?
<Window x:Class="WpfGridAdd.Window1" xmlns="
http://schemas.microsoft.com/winfx/2006/xaml/presentation " xmlns:x="
http://schemas.microsoft.com/winfx/2006/xaml ">
<ListView x:Name="listview">
<ListView.View>
<GridView>
<GridViewColumn DisplayMemberBinding="{Binding Path=Col1}" />
</GridView>
</ListView.View>
</ListView>
</Window>
using System;
using System.Windows;
using System.Collections.ObjectModel;
namespace WpfGridAdd
{
public partial class Window1 : Window
{
public Window1()
{
InitializeComponent();
ObservableCollection<MyItem> items = new ObservableCollection<MyItem>();
items.Add(new MyItem("sample1-col1"));
listview.ItemsSource = items;
}
}
public class MyItem
{
private string _col1; public string Col1 { get { return _col1; } set { _col1 = value; } }
public MyItem(string col1) { _col1 = col1; }
}
}
729 :
デフォルトの名無しさん :2009/04/29(水) 08:40:05
>>728 ありがとう。できました。
2chなんかでどうせろくな回答得られないと思ってだめもとで
質問してみたけど、あなたみたいな素敵な人がいるって
捨てたもんじゃないと、嬉しい限りです。
それにしても行追加するぐらいでクラスまで作って
こんなめんどくさいことするなんてなんだかWPFって
どうなのかと思いました。
730 :
デフォルトの名無しさん :2009/04/29(水) 09:19:44
ちなみにセルの内容をコードから変更した場合 itemsに新しい値をいれてそして listview.ItemsSource = items; をする事になるのでしょうか? 1行では済まないですか? それと listview.ItemsSource = items; だと1つしかセルを操作してなくても 全部の内容をセットしなおすのはなんだか無駄な気がするので ここはすっきりできないものでしょうか?
ObservableCollectionに要素を追加削除した場合は自動的に反映される 要素の中身をいじった場合はその要素がINotifyPropertyChangedを実装してるか あるいはいじったのが依存プロパティで実装されてるなら自動で反映される
>>730 > listview.ItemsSource = items;
> をする事になるのでしょうか?
例としてローカル変数にしたけど、itemsをクラス変数にして最初に
ItemsSourceに代入しておけば後で操作しても反映される。のでAdd1行で済むよ。
必須ではないがitemsをプロパティにしてListViewにバインドしてもいい。
<ListView ItemsSource="{Binding Path=Items}" (略
733 :
デフォルトの名無しさん :2009/04/29(水) 15:27:24
ありがとう。 <ListView ItemsSource="{Binding Path=Items}" (略 ただ、これやってみたけど反映されませんでした。 itemsをクラス変数にして最初に ItemsSourceに代入しておけば後で操作しても反映される これってどうするんですか? すいません。こんな僕でよかったら教えてください。
734 :
デフォルトの名無しさん :2009/04/29(水) 16:04:26
まずはどんな努力をしたか書かないと教えたくない。
735 :
デフォルトの名無しさん :2009/04/29(水) 16:24:03
736 :
726 :2009/04/29(水) 16:57:38
ちなみに
>>734 は別人。前のコードを一部変更↓追加して<ListView ItemsSource="{Binding Path=Items}">してみて。なおこれはAINotifyPropertyChangedには関係ない。
private ObservableCollection<MyItem> _items = new ObservableCollection<MyItem>();
public ObservableCollection<MyItem> Items { get { return _items; } set { _items = value; } }
public Window1()
{
InitializeComponent();
this.DataContext = this;
_items.Add(new MyItem("sample1-col1"));
}
737 :
726 :2009/04/29(水) 17:05:16
>>733 こっちは
> itemsをクラス変数にして最初に
> ItemsSourceに代入しておけば後で操作しても反映される
> これってどうするんですか?
private ObservableCollection<MyItem> _items = new ObservableCollection<MyItem>();
public Window1()
{
InitializeComponent();
listview.ItemsSource = _items;
_items.Add(new MyItem("sample1-col1"));
}
こういうこと。バインドしないというだけで違いはない。
738 :
デフォルトの名無しさん :2009/04/29(水) 23:24:18
726様へ 737のやり方でやりました。 行追加したらいちいち listview.ItemsSource = _items; これしなくてもできました。 助かりました。 ただ、各々のセルの値を変更したい場合はどうすればいいのでしょうか? また、バッグカラーやフォアグランドなどを変更する方法も 教えて頂ければ助かります。 C#のDataGridViewは慣れてるんですがxamlはなかなか大変です。
739 :
726 :2009/04/30(木) 00:37:33
>ただ、各々のセルの値を変更したい場合はどうすればいいのでしょうか? public class MyItem : INotifyPropertyChanged { private string _col1; public string Col1 { get { return _col1; } set { _col1 = value; NotifyPropertyChange("Col1"); } } public MyItem(string col1) { _col1 = col1; } public event PropertyChangedEventHandler PropertyChanged; internal void NotifyPropertyChange(string propName) { if (PropertyChanged != null) PropertyChanged(this, new PropertyChangedEventArgs(propName)); } } で、変更したい時に _items[0].Col1 = DateTime.Now.ToString("HH:mm:ss"); みたいに。 セルの外観はXAMLでGridViewColumnにHeaderTemplateやCellTemplateを定義すればなんぼでも。 あとは長くなるんでググってね。初めは面倒に思うが難しくないよ。
740 :
デフォルトの名無しさん :2009/04/30(木) 02:20:51
>>726 お世話になっております。726様。
やってみたのですが、変わらないです。
それと、セルの値やバッグカラーはコードから変更したいので
XAML側でやるわけではないのです。
明日というか今日もご返信いただければ嬉しいです。
今日は疲れました。寝ます。おやすみなさい。
別にいいんじゃねーの? 教えることで知らないことも出てくるかもしれないからな。 まあ世話されてる野郎は問題児だが。
行追加は問題なくいきます。 ただ、チェックボックスの列があるんですが trueにしてるのにOFFで表示されます。 それとコードから値変えてるのに変更されません。 内容はこれです。
public Window1() { InitializeComponent(); listView1.ItemsSource = items; }
private ObservableCollection<PersonName> items = new ObservableCollection<PersonName>(); public class PersonName : INotifyPropertyChanged { private bool tf; private int bango; private string firstName; private string lastName; public PersonName(bool tt, int ban, string first, string last) { tf = tt; bango = ban; firstName = first; lastName = last; } public bool Cb { get { return tf; } set { tf = value; } } public int Number { get { return bango; } set { bango = value; } }
public string FirstName { get { return firstName; } set { firstName = value; } } public string LastName { get { return lastName; } set { lastName = value; } } public event PropertyChangedEventHandler PropertyChanged; internal void NotifyPropertyChange(string propName) { if (PropertyChanged != null) PropertyChanged(this, new PropertyChangedEventArgs(propName)); } }
private void button1_Click(object sender, RoutedEventArgs e) { items.Add(new PersonName(true, items.Count, "kkk", "lll")); } private void button2_Click(object sender, RoutedEventArgs e) { items[2].LastName = "まゆみ"; }
変更されたら通知しろよ NotifyPropertyChangedメソッドが呼ばれてなくて寂しそうじゃねーか もっと739のコードよく見ろ
749 :
デフォルトの名無しさん :2009/04/30(木) 19:30:27
<Window.Resources> <DataTemplate x:Key="FirstCell"> <StackPanel Orientation="Horizontal"> <CheckBox IsChecked="{Binding Path=Cb, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ListViewItem}}}"/> </StackPanel> </DataTemplate> </Window.Resources>
<ListView Canvas.Left="460" Canvas.Top="599" Height="146" Name="listView1" Width="299"> <ListView.View> <GridView x:Name="kanri" AllowsColumnReorder="False" > <GridViewColumn x:Name="isf" Width="30" CellTemplate="{StaticResource FirstCell}" > <GridViewColumnHeader Content="選択" Background="Black" Foreground="AliceBlue" /> </GridViewColumn> <GridViewColumn x:Name="namae" Width="100" DisplayMemberBinding="{Binding Path=Number}"> <GridViewColumnHeader Content="名前" Background="Red" /> </GridViewColumn> <GridViewColumn x:Name="jotai" Width="70" DisplayMemberBinding="{Binding Path=FirstName}"> <GridViewColumnHeader Content="状態" Background="Green" /> </GridViewColumn> <GridViewColumn x:Name="jikan" Width="70" DisplayMemberBinding="{Binding Path=LastName}"> <GridViewColumnHeader Content="時間" Background="Green" /> </GridViewColumn> </GridView> </ListView.View> </ListView>
>>748 ありがとう。見落としてました。
それぞれ
public bool Cb
{
get { return tf; }
set { tf = value;
NotifyPropertyChange("Cb");
}
}
こういう風にすべきだった。
ちなみにコード書きまくったせいでアクセス規制になってしまったので
他のパソコンから書いてます。
間が空いてすみません。
あとはチェックボックスがなぜかtrueで入れてるのに OFFになってしまいます。 困りました。
WPFってMONOで動かないの?
今のところWPFを実装する予定はないみたいだね
"Windows" Presentation Foundationだからな あくまでWindows専用のプレゼンテーションフレームワークだろ
"Windows" Form はMONOで動くんだけど
>>756 がんばって移植したんじゃないの?
GTK#とWindows.Formsとどっちが安定してるかは知らんけど
返信無いな。 726さんに見捨てられちゃったかな。 それか、チェックボックスはやり方知らなかったんだろうか。
RelativeSourceイラネ
>>759 ありがとう。助かった。
これで寝られる。
MSDNまるまるこぴぺしたのに。
何だよあれ。
ああ、忘れてた。 セルのバッグカラーはコードからどうやって操作するか教えてください。 お願いします。
Layout後にSnapsToDevicePixelsを効かせる方法ない?
MONOはShilverLightをお勧めしてるよ
hイラネ
MoonLightか
726さんは俺を見捨てたのだろうか。 それとも、コードからセルのスタイル設定する方法は知らないのだろうか。
見捨てたんだろう 何せ自分の頭で考えるということを知らない奴を相手にするのは面倒だ
>>766 つまらん煽りをいれるなよ
普通の頭持ってる奴なら調べればすぐ分かることだ
それでも分からず教えてもらいたいなら聞き方を学んで来い
ぐすん
あれから色々調べたら行単位で変更する方法は載ってるけど セル単位での変更なんて相当調べたけど見つからないぞ。 何が調べればすぐわかるだよ。 何か人の聴き方が悪いとかのせいにして 自分達の無知を隠そうとしてるだけじゃないか。
何コイツ?
そもそもセルの色を変えようとすることがおかしい。 そんなわけのわからんことをしようとするから どうでもいい問題にぶつかるんだ。 セルの色は変えるな。
>>773 何だよ、その理屈。ぐすん。
普通のWindowsアプリだったら1行でさくっと済むことなのにさ。
なら普通のWindowsアプリを作れば? お前にWPFは向いてないよ。
WPFはウンコ
いや、WPFはウピフ
素直にDataGrid使えばいいのに
>>775 向いてないも何も調べたって資料出てこないぞ。
調べもしないでとか言うくせに、全然資料ないし。
みんなも実はやり方知らなかったジャン。
>>778 え?あったの?はやく言ってよ。
見方を変えてみれば こういうアホでもプログラミング出来る時代になったんだなと 感慨深い
>>780 何だよ。アホとかバカとか。
自分もやり方知らないくせに。
WPFってMONOの後ろ盾が無いのか
素直に聞けば教えてもらえて自分の糧になるのに 自分が知らないことは他人も知らないと決め付けて何も得られないかわいそうな人
見栄っ張りばかりのスレ
>>782 Silverlight 4あたりで統合されるだろうから、心配いらないんじゃない?
まだ、2,3年かかるかもしれないけど。
WindowクラスにPreviewDragOverとPreviewDropのイベントを加えて ドラッグアンドドロップできるようにしたんだけど、ウィンドウのタイトルバーへは なぜかドロップできない。他のアプリ(たとえばVisualStudio)ではタイトルバーへのドロップでも 受け付けるのだけれど、何がまずいんだろうか?
みんなやり方知らないみたいだから 妥協策考えた。 ユーザーコントロールでラベル横に並べたやつを作って スクロールビュワーに追加していくことにした。 これでめんどくさいことなくなる。
もう来るなよ
>>789 そんな感じだから見栄っ張りとか言われるんだぞ。ぷーん。
うぜえ
売り上げや売り上げ予測をデータとグラフで表示させる場合って WPFやるよりSilverlightの方がいいの? 動作の速いほうを希望
性能変わらん。
性能は違うだろ
そんぐらいだったら動作大差ないだろ
ブラウザで使わせる予定なかったらWPF そうでなければSilverlight でいいだろ
ルーティングイベントのバブルとトンネルってどう使い分けたらいいの?
下位のバブルに捕まる前に上位で捕まえたければトンネルで
Window の HWND は取得できるみたいだけど、 ContextMenu の HMENU は取得する方法ない?
正直ルーティングイベントはやりすぎだと思う。 もっさりしてるのはあれのせいだろ。
DataContext の変更に伴う画面の再描画時、カーソルを砂時計にすることはできるでしょうか? void Foo(){ Mouse.OverrideCursor = Cursors.Wait; DataContext = (hogehoge.) Mouse.OverrideCursor = null; } としてみたんですが、再描画するのは Foo を抜けた後らしく砂時計になりませんでした。
>>802 レンダリングよりも低い優先順位でキューに突っ込んでおけばいけるはず。試してみて。
Mouse.OverrideCursor = Cursors.Wait;
DataContext = hoge;
Dispatcher.BeginInvoke(DispatcherPriority.Loaded, (Action)(() => { Mouse.OverrideCursor = null; }));
804 :
デフォルトの名無しさん :2009/05/06(水) 14:32:13
表示の優先度の制御に関しての質問です。 現在、Canvas内にImageを適当に配置しております。 これらドラッグして移動させるように作っているのですが、 ドラッグ中はCanvas内で表示と優先度をどのImageよりも 高く設定したいと思っております。 ButtonなどはZIndexプロパティーなどがありますが、 Imageなどには存在していないようです。 表示の優先は後に記述してあるImageの方が高くなるようですが、 これをプログラムから制御する方法などはございますでしょうか?
CanvasにImageなんて貼るからそういうことになる。
806 :
デフォルトの名無しさん :2009/05/06(水) 15:09:20
>>805 親要素は何を指定したら良いのでしょうか・・・
>>804 Panel の ZIndex 添付プロパティを使う。XAML なら Panel.ZIndex="10"、コードなら次の通り。
Panel.SetZIndex(hogeImage, 10);
もしくは
hogeImage.SetValue(Panel.ZIndexProperty, 10);
2つとも意味は同じ。親要素は Canvas でも問題ないよ。
809 :
デフォルトの名無しさん :2009/05/06(水) 16:58:49
>>808 早速のお返事ありがとうございます。
無事問題を解決できました。
今までのプログラミング経験からは、なかなか
添付プロパティを意識できなかったので探せていませんでした。
ありがとうございました。
810 :
802 :2009/05/06(水) 22:41:06
InternetExplorer の アドレスバーのように、横いっぱいに広がるツールバーを 作りたいです。 ToolbarTray に横幅を合わせるだけなら Binding で解決できますが、 同じ Band 上に他のツールバーがあるときは、それを考慮した上でいっぱいに 広げるにはどうしたらよいでしょうか?
<ToolBar Width="500"> <StackPanel Width="500"> <TextBlock>Hello</TextBlock> </StackPanel> </ToolBar> とすると、ToolBar のクライアント領域?を超えるため表示されなくなってしまいますが、 クライアント領域を超えない最大幅を設定したい場合はどうしたらよいのでしょう?
Autoじゃあかんの?
814 :
812 :2009/05/08(金) 20:36:47
<ToolBar Width="500"> <StackPanel Width="Auto"> <TextBlock>Hello</TextBlock> </StackPanel> </ToolBar> Auto にした場合、TextBlock のサイズにサイズにされちゃうんですよね。 StackPanel を TooBar の内寸いっぱいに表示して、TextBlock (と実際には あといくつかのコントロールを)を StackPanel いっぱいに表示したいって 感じです。
ToolBarをRelativeSourceにしてActualWidthをBindingとか
ちょっと見た感じ、StackPanelのOrientation付け忘れてない?横表示だよね。 あとは幅を自動調整で割合一定で表示したいならSTackPanelよりGridがよくないかな。
817 :
812 :2009/05/08(金) 22:55:05
>>815 <StackPanel Width="{Binding RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type ToolBar}},Path=ActualWidth}" Orientation="Horizontal">
としてみましたが、Width="500" とした場合と同じで中身が消えちゃいますね。
>>816 同じ割合ではなく、特定項目以外は固定幅にしたいんです。
<ToolBar Width="250">
<StackPanel Width="200" Background="Yellow" Orientation="Horizontal">
<TextBlock Width="30" Background="Aqua">Hello</TextBlock>
<TextBox>ABC</TextBox>
<Button Width="50">OK</Button>
</StackPanel>
</ToolBar>
現状はこんな感じで、
1.StackPanel を ToolBar の内寸いっぱいに
2.TextBlock と Button のサイズは固定で TextBox の大きさを連動して変えたい
って感じです。
StackPanel の代わりに DockPanel のほうが適切かな?
1 を実現する方法がわからないので困っています。
VisualTree眺めたらStackPanelの直上はToolBarPanelらしいからそれのActualWidthで 子要素1つの大きさ自動ならDockPanelかGridどっちでも
819 :
812 :2009/05/09(土) 07:15:26
>>818 ご指摘の方法でいけました。ありがとうございました。
WPF のサンプルを見ると #region を使って、メソッドとかプロパティとかをまとめているのを みかけますが、あれって、自動でやる方法があるのでしょうか? 現在は、手動でならべ変えていて面倒なので良い方法はないかと。
ない
822 :
デフォルトの名無しさん :2009/05/09(土) 18:00:25
テキストボックスとのバインディングで悩んでいます。 バインディング時のアップデート方法は何通りか選択でき、デフォルトでは フォーカスが無くなった時にソースへアップデートされます。 この動作を、テキストボックスに値を入力した後、エンターを入力した 時点でソースへデータをアップデートできたらと思っています。 何か良い方法はございますでしょうか?
UpdateSourceを明示的に呼び出せば?
>>812 に便乗、DockPanelの子に指定するとコントロールの外観(例えばButton)が変わるよね?
手動で設定するしかないんだろうか。
TabControl はタブが一行に収まりきらないと複数行表示になりますが、 これを一行でおさめたいです。 調べた結果、TabPanel のかわりのカスタムコントロールを自分で作るしかない ように思われるのですが、xaml だけで済ませるほうほうがあったら教えてください。
ItemsPanelにWrapPanel使えばなんとかなるんじゃないか
827 :
デフォルトの名無しさん :2009/05/10(日) 22:46:16
>>823 どもです、KeyUpイベントにてUpdateSourceを使用しましたら実現できました。
2.0 Adobe AIR製 ← 今ここ ↓ Ajax ↓ Flash ↓ NewYorkPostに買収される
独自のテキストプロパティを作成したくて以下のように依存プロパティを定義して XAMLから <TextBlock Text="test" /> のようにしてもMy text testと表示されません。 何か追加の処理が必要ですか? namespace WpfApplication1 { public partial class Window1 : Window { public Window1() { InitializeComponent(); } } public class TextBlock : DependencyObject { public static readonly DependencyProperty TextProperty = DependencyProperty.Register("Text", typeof(string), typeof(TextBlock)); public string Text { get { return (string)GetValue(TextProperty); } set { SetValue(TextProperty, "My text" + value); } } } }
ExpressBlendやFlashのスコアウィンドウと同じようなUIを作成しようと思っております。 実装案としまして、下記のような物を考えました。 ○<Grid>を作成(トラックをrow、フレームをcolumnとする)。 ○グリッドを<Separator>で分割して格子を作成。 ○各トラック上に存在するオブジェクトをLabelにて表現。 WPFの経験が浅いので、このようにしか思いつきませんでした。 もしより良い方法がございましたらお教えいただけますでしょうか・・・。 よろしくお願いいたします。
以下のような自作のコントロールを作って XAMLに追加しようとすると、UIElementCollectionに追加できません。 とエラーになります。型UIElementの項目しか駄目みたいですが どうすればUIElementの項目にできるのでしょうか? namespace CustomLib { public class Widget : DependencyObject { public static readonly DependencyProperty MyTextProperty = DependencyProperty.Register("MyText", typeof(string), typeof(Widget)); public string MyText { get { return (string)GetValue(MyTextProperty); } set { SetValue(MyTextProperty, "My text" + value); } } } }
>>833 レスありがとうございます。
同一人物です。
何か見当違いのことをやろうとしていたみたいです。
失礼しました。
DependencyObjectをFrameworkElementが継承して
いました。
エクスプローラをアイコン表示にしてファイルを選択するとファイル名のテキスト部分の 背景が青、前景が白になり、アイコンは青みがかったような表示になりますが、あれと同じ ように表示する機能を作っています。 現状、項目が選択された時にテキスト部分の背景と前景を変える事はできたのですが アイコンを青みがかったような表示にする方法が分からず、どうすれば実現できるでしょうか? (itemの構成は、StackPanelにImageとCanvasを配置しCanvasの中にTextBlockを 置いています。Imageのソースはpngファイルです。)
上に半透明のRectangleかなんかでも置けば? // Adornerでもいいかな
コードビハインドが何行くらいになったら分割を検討する? OutlookExpress みたいな3ペインのウィンドウで作っていて、 500 行超えたので見通し悪いので、ペインごとに UserControl に しようとかと考えてるんだが。 それぞれのペインはそのウィンドウでしか使わないので、 再利用性とかは考えなくてもいい。 こんな場合、お前らどうする?分割する?しない? MVVM モデルで作っているという前提でお願いします。
838 :
835 :2009/05/13(水) 19:38:26
>>836 Adornerで実現できました
ありがとうございました
結構悩んでたので感無量・・・
TreeViewItem に対して右ドラッグ&ドロップしてみた。 DragEnter,DragOver 時は KeyStatets==RightMouseButton だったんだけど、 Drop 時だけは、KeyStatets==None になってた。 Drop 時の DragEventArgs からはどのマウスボタンでドラッグされたかは わからないということ?
まあDropされたってことはすでにボタンは解放されてるわけだしな DragMoveでの最終値を保存しとけば?
始めたばかりだけど…スプレッドシートがないのにちょっとビックリ。 これって何かの意図があるんでしょうか?
ListViewのGridView表示を使う。
DataGridが欲しいのであればWPFToolkitをどうぞ
>>1 のリンクは少し古いので注意(最新はMarch 2009)
>841 Microsoftの予想では、もっとビジネスアプリの割合は少ないはずだったらしい。
トン。少ないって…それもすごい予想ですね。 編集の必要があるのでGridViewにTextBoxを入れて編集可能に、とやってみたのですが、 選択時にも背景色が白のまま/前景色が黒のままだったり、 テキストボックス部分を選択しても行選択にならなかったり、 キーボード操作が非常に不便で使い物になりそうもない or 使い物になるようにするのはかなり大変そうでした。WPFToolkitも検討してみます。
845 :
デフォルトの名無しさん :2009/05/18(月) 01:24:00
Gridの中にLineを描画したいと思っています。 <Grid Grid.Row="2" Grid.Column="0"> <Grid.ColumnDefinitions> <ColumnDefinition Name="_aaa" Width="192"/> <ColumnDefinition Width="1*"/> </Grid.ColumnDefinitions> <Grid.RowDefinitions> <RowDefinition Name="_bbb" Height="22"/> <RowDefinition Height="18"/> <RowDefinition Height="18"/> </Grid.RowDefinitions> <Line Grid.Column="0" Grid.Row="0" X1="0" Y1="{Binding ElementName=_bbb, Path=ActualHeight}" X2="{Binding ElementName=_aaa, Path=ActualWidth}" Y2="{Binding ElementName=_bbb, Path=ActualHeight}" Stroke="Black" StrokeThickness="10"/> </Grid> 続きます・・・
846 :
デフォルトの名無しさん :2009/05/18(月) 01:26:43
エディット中に表示されるプレビュー画面では、 Lineはちゃんと表示されております。 しかし、コンパイルして起動すると描画されないので困っています。 Lineの座標指定をバインディングではなく、 即値で指定すると表示される事を確認しました。 バインディングの行い方に問題があるようなのですが、 いまいちその作法がわかりません。 もしよろしければ、解決方法をお教えいただけますでしょうか・・・
<Canvas Name="Canvas1" Grid.Column="0" Grid.Row="0"> <Line X1="0" Y1="{Binding ElementName=Canvas1, Path=ActualHeight}" X2="{Binding ElementName=Canvas1, Path=ActualWidth}" Y2="{Binding ElementName=Canvas1, Path=ActualHeight}" Stroke="Black" StrokeThickness="10"/> </Canvas>
<Grid Grid.Row="2" Grid.Column="0"> <Grid.ColumnDefinitions> <ColumnDefinition Name="_aaa" Width="{Binding Path=Value, ElementName=slider, Mode=Default}"/> <ColumnDefinition Width="1*"/> </Grid.ColumnDefinitions> <Grid.RowDefinitions> <RowDefinition Name="_bbb" Height="22"/> <RowDefinition Height="18"/> <RowDefinition Height="18"/> </Grid.RowDefinitions> <Line Grid.Column="0" Grid.Row="0" Y1="{Binding ElementName=_bbb, Path=ActualHeight, Mode=OneWay}" X2="{Binding Path=ActualWidth, ElementName=Window, Mode=OneWay}" Y2="{Binding ElementName=_bbb, Path=ActualHeight, Mode=OneWay}" Stroke="Black" StrokeThickness="35"/> <Slider VerticalAlignment="Bottom" Grid.Column="0" Grid.Row="3" x:Name="slider" Maximum="500" Value="200" Grid.ColumnSpan="2" Grid.RowSpan="1"/> </Grid> こんな感じなら値が変わったときに適応
849 :
846 :2009/05/18(月) 16:08:04
レスありがとうございます。
>>847 同じように記述しましたら無事描画できました。
Canvasに入れないと描画出来ないのは仕様?なのかな。
もしよろしければこの辺に言及しているWebの資料がございましたら、
紹介していただけますでしょうか・・・。
>>848 多分スライダーにあわせてLineが伸びるように、実装されて
いると思われますが、Lineは表示されませんでした。
申し送れましたが環境は、Visual C# 2008 Express Edition、
OSはXPでSP2 を当てております。
StandardやProfessionalとは動作が違う?のかな。
>>849 もっと自分で勉強したほうがいいんじゃねーの?
環境によってできないとか、
<Window x:Class="Window1"
xmlns="
http://schemas.microsoft.com/winfx/2006/xaml/presentation "
xmlns:x="
http://schemas.microsoft.com/winfx/2006/xaml "
Title="Window1" x:Name="Window" Width="640" Height="480">
<Grid Grid.Row="2" Grid.Column="0">
<Grid.ColumnDefinitions>
<ColumnDefinition Name="_aaa" Width="{Binding Path=Value, ElementName=slider, Mode=Default}"/>
<ColumnDefinition Width="1*"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Name="_bbb" Height="22"/>
<RowDefinition Height="18"/>
<RowDefinition Height="18"/>
</Grid.RowDefinitions>
<Line Grid.Column="0" Grid.Row="0"
Y1="{Binding ElementName=_bbb, Path=ActualHeight, Mode=OneWay}"
X2="{Binding Path=ActualWidth, ElementName=Window, Mode=OneWay}"
Y2="{Binding ElementName=_bbb, Path=ActualHeight, Mode=OneWay}"
Stroke="Black" StrokeThickness="35"/>
<Slider VerticalAlignment="Bottom" Grid.Column="0" Grid.Row="3" x:Name="slider" Maximum="500" Value="200" Grid.ColumnSpan="2" Grid.RowSpan="1"/>
</Grid>
</Window>
852 :
デフォルトの名無しさん :2009/05/20(水) 01:02:16
>>849 実行時にLineの値を確認すると上手く値を持ってこれておらずBindingが
機能してませんね。
今回の状況では実行に変わるソースの値で更新しようとしてますが、これには
ソース側のプロパティが依存関係プロパティでないとダメなのかな。
Canvas.ActualHeightはFrameworkElementから継承した依存関係プロパティを
持ってるね。
一言で言うとソースにColumnDefinitionを選んだのがよろしくなかった、と
C++/CLIでxbapから呼べるクラスライブラリってつくれるんでしょうか。 /NODEFAULTLIB:msvcmrt.libとか/clr:safeとか適当にやっても 「インスタンスを作成できません。」とでてしまいます・・・
DataGridのドキュメントがMSDNに来てるね
855 :
849 :2009/05/22(金) 01:14:05
>>852 レスありがとうございます。
ColumnDefinitionはependencyObjectを継承しているので、
てっきりすべてのプロパティーは依存関係プロパティーだと思っておりました。
もしよろしければ見分ける方法をお教えいただけたられしいです。
856 :
849 :2009/05/22(金) 02:38:01
>>852 MSDNをもう一度呼んでみましたが、プロパティーの解説に
「依存関係プロパティーです」との但し書きが在る無しで見分ければ良いのでしょうか?
TextのBinding.UpdateSourceTriggerがPropertyChangedじゃなくてLostFocusだという理由は > 通常、テキスト フィールドには適していません。各キーストロークの後に更新を行うと、 > パフォーマンスが低下する可能性があり、ユーザーは新しい値をコミットする前に BackSpace > キーを使用して入力エラーを修正するという通常の操作ができなくなります。 分からなくはないけど…パフォーマンスはともかく、 エラー表示が一旦出てもそのままユーザは修正できるか大きな問題ではない気が。 フォーカスの順序がテキストボックス→ボタンとなっていて、 ボタンのCommandのCanExecuteがテキストボックスの内容に依存している場合、 テキストボックスでTabを押したときにボタンに移動できない気が。 こっちのほうがずっと致命的じゃないか?
訂正 ×テキストボックスでTabを押したときにボタンに移動できない気が。 ○ボタンが無効な状態でテキストボックスの入力を(ボタンがが有効になるよう)修正し、 そのままTabを押したときにボタンに移動できない気が。
Path で Binding してあるときは、OnPropertyChanged で変更を通知できるけど、 Converter で Binding したときってどうやって View に変更を通知するの?
ModelViewからViewへの通知は、Converterありでもなしでも INotifyPropertyChangedでできるはずだけど、そういうことじゃないの?
861 :
859 :2009/05/24(日) 21:13:02
>>860 View 側には {Binding Path=Foo} としたときは、
ViewModel 側で、OnPropertyChanged("Foo") で View は更新されます。
View 側に、{Binding Converter={StaticResource fooConverter}} としたときは、
OnPropertyChanged では通知のしようがないとおもってたんだけど
ちがうの?
単純なテストコードですぐ確認できるんだから聞く前に試そうぜ
Pathでバインド、Converterでバインドってそういうことか。 バインドを理解していないような気がするが。 Pathを省略=オブジェクト全体をPathに指定 Converterを省略=デフォルトのコンバータをConverterに指定 省略できるだけで、両方とも常にやっている。 で、オブジェクト全体の変更通知(PropertyChangedの第二パラメタ=null) すればいいんじゃないか?やったことないけどな。
・バインドオブジェクト自体を変更する ・BindingExpression.UpdateTargetを呼び出す のどっちかかな
865 :
859 :2009/05/25(月) 22:40:21
Path と Converter って排他で指定するんだとばかり思ってました。 勉強になりました。
デバイスに依存しない単位って何のために用意されてるの?ややこしい
デバイスに依存しないためだろjk
マウスに関する質問です。 特定コントロールの原点からのマウスカーソル座標を得たいと思っています。 コントロール内にマウスがある場合はMouseMoveなどのイベントで、 座標情報を取得できますが、そのコントロール外にカーソルが出てしまうと イベントが発生しないため取得が出来ませんでした。 マウスカーソルがWindowの外に出てからも、特定コントロールからの マウスカーソル座標を得たい場合、どのような手法があるのでしょうか?
GetCursorPos[Win32API]とPointFromScreen
870 :
デフォルトの名無しさん :2009/05/26(火) 22:55:24
むしろCaptureMouseメソッドかな
871 :
デフォルトの名無しさん :2009/05/26(火) 22:59:29
>>870 ・MouseDown
・MouseUp
内で、
・CaptureMouse();
・ReleaseMouseCapture();
を呼び出したら希望通りの動作を実現できました。
ありがとうございました!
IDataErrorInfoの使い方ですが、 複数の値が関係してOK/NGが判定される場合どうすればいいんでしょう? 最大値を入れるテキストボックスと、最小値を入れるテキストボックスがあり 「大小関係に矛盾があったら両方にエラーを出せ」と要求されています。 そのまま最大値と最小値を個別に実装すると、 最大値を変更して"最大値<最小値"に設定した場合、最大値側のほうにだけエラーが表示されます。 (変更されなきゃエラーの判定なんてされないのだから当然でしょうが) 今は最大値を変更されたら、PropertyChangedを使って 最小値を変更したように見せかけエラーを表示させています。 この場合、ViewとViewModelの値が違う場合(数値以外が入力された場合等)に、 Viewに表示されている値が、ViewModel側の値に強制的に変わってしまいます。 どうにも挙動が微妙に怪しくなってしまうので、そもそも使い方が間違っているような気が…
<Trigger Property="DockPanel.Dock" Value="Left"> <Setter ... /> (略) </Trigger> <Trigger Property="DockPanel.Dock" Value="Right"> <Setter .../> (略) </Trigger> ↑こんな風に xaml 書いてるんですが、Setter 部分は共通なのでできれば Trigger を一つにしたいです。 <Trigger Property="DockPanel.Dock" Value="Left" or "Right"> みたいに書きたいってことなんですが、なにか良い方法ありますか?
875 :
デフォルトの名無しさん :2009/05/31(日) 16:01:22
PathってDataプロパティを使って長さを直接指定するので、Rectangleや ボタンなどのように親パネルの大きさに合わせることができないってずっと 思い込んでいたのだが、Stretchプロパティを使えば同じように自動で 拡大縮小させられるんですな。 知りませんでしたよ。
あとWin7のXPS Viewerが・・・とか書いてあるが、 あれは7ではWPFではなくネイティブプログラムになったぞ
ていうかちゃんと
>>876 のリンクの下のほうに書いてあるじゃないか
Text enhancements
WPF 4.0 Beta 2 introduces a new text rendering stack which allows for much clearer text rendering.
This change adds the necessary knobs to allow WPF text to look virtually indistinguishablefrom Windows’ traditional GDI-rendered text.
The clarity improvements also dramatically improve readability for many East Asian languages.
書いてあったね。すまん。表しか見てなかった。
フォントレンダリングに腐心してくれなくても、ギザギザビットマップフォントが使えるようになればそれで満足なんだけどなぁ
なんでビットマップフォント使えなくしたの?
883 :
デフォルトの名無しさん :2009/05/31(日) 20:38:29
使えなくしたんじゃなくて使えるようにしてないだけ 独自レンダリングなんだから
>>866 四半世紀くらい前に出版されたInside Macintoshって本にその意義が
載っていたのを思い出した。懐かしい。
表示内容の切り替えなんだけど、 グリッドごとにくくって「Visible=Hidden、Visible」を指定して切り換えているんだけど、もっとうまい方法ない? アニメーション指定とかするととてもめんどくさい。 なんかWPF用のアニメーションを考慮したタブコントロールができたらいいのに・・・
Rectangle の IsVisible って get しかできないんだけど、 表示/非表示を切り替えるにはどうしたらいいの?
Visibility でどうか
>>889 スレチのようなスレチじゃないような・・・
そういえばAvalonってWPFの事だっけ?それともAero?Direct2D?
AvalonはWPFの事だね
ワーニングについての質問です。 ユーザーコントロールを作成した結果、 下記のワーニングが出力されました。 C:\Documents and Settings\onamae\Local Settings\ Application Data\Temporary Projects\DirComp\Ruler.xaml.cs の型 'DirComp.Ruler' は、 c:\Documents and Settings\onamae\Local Settings\ Application Data\Temporary Projects\DirComp\bin\Release\DirComp.exe のインポートされた型 'DirComp.Ruler' と競合しています。 C:\Documents and Settings\onamae\Local Settings\ Application Data\Temporary Projects\DirComp\Ruler.xaml.cs で定義された型を使用しています。 C:\Documents and Settings\onamae\Local Settings\ Application Data\Temporary Projects\DirComp\Ruler.xaml 4 26 DirComp Rulerと言うユーザーコントロールは、 DirCompと同一アセンブリとなっています。 競合を解決したいのですが、どのように回避してよいかわかりません。 良い解決方法がございましたらお教えいただけますでしょうか・・・。
893 :
デフォルトの名無しさん :2009/06/06(土) 22:27:32
<TextBlock Text="{Binding RelativeSource={RelativeSource AncestorType={x:Type local:Window1}},Path=TestProperty}" /> といった感じで書くと、”Mode は、RelativeSource に対して指定される必要があります。”というエラーが出ます。 しかし、ビルドはなぜか成功しますし、一回ビルド通るとエラーが消えます。 これは何が原因でしょうか?
xaml編集に関してはIntelisenceがアホだから。 似たような現象はあちこちで起きていない?
MVVMでプログラムを作っていて、 ViewModel 同士で状態の変化を伝えたい場合、 お前らどうする? 1.すでに INotifyPropertyChanged を実装しているのだから、それを使う。 2.OnXXXXChanged みたいな event を実装する。 という2種類の方法が考えられると思うんだが、 前者はすでに実装されているから、手間は少ないがどのイベントが変更されたか 文字列で判定するのでパフォーマンス的に不利。 後者は高速だが実装が手間。 だから、パフォーマンスが問題にならない場合は前者を 使っておけばよいという認識であってる?
>>895 自分も悩んだけど、
ViewModelはモデルにかぶせて、ViewのためのI/Fを提供するもの
=ViewModelはそれぞれがモデルを操作。必要ならモデルの状態変化を受け取ってViewModelも変化
ってことで、直接ViewModel同士でのやりとりは避けていた。
可能性としては、モデルを介さずにViewModelの表示用データ(編集中のデータとか)間で
やりとりが生じる場合も考えられるけど、そんな状況ならそもそもViewModelを分離する必要があるのだろうか。
これに限らず、ViewModelは、Viewに合わせるために作りが汚くなりがちだし、
処理が散らばりがちだし上手くまとめれんw
>>894 なるほど、そういう事でしたか・・・。
確かにインテリセンス、頻繁に出なくなったりします。
結構この機能に頼ってる自分には辛いですw
898 :
デフォルトの名無しさん :2009/06/07(日) 01:11:42
他のプロジェクトで作成したユーザーコントロールを、現在作業中の プロジェクトにインポートして使用したいと思っています。 対象プロジェクトをインポートして参照設定行いましたが、xmlns:n="clr-namespace:XXApp" のように名前空間を設定しても利用できませんでした。 CLR 名前空間が定義されていません。clr-namespace URI が、 アセンブリに含まれていない名前空間 'XXApp' を参照しています。 との事でなのですが、どのように解決すればよいでしょうか? 環境は VS C# ExpressEdition です。
>>898 どのアセンブリの名前空間をインポートするか指定しないといけない。
xmlns:sys="clr-namespace:System;assembly=mscorlib"
900 :
デフォルトの名無しさん :2009/06/07(日) 02:13:01
>>899 ありがとうございます。
試してみましたが症状は変わりませんでした。
あとインテリセンスには、インポートしたいアセンブリの名前が
表示されないので、インポートの行い方がまずいのでしょうか・・・。
テストクラスをインポート対象のプロジェクトに書いて、
作業プロジェクトのC#ソースから名前空間を指定した場合は、
ちゃんと利用できていることは確認しました。
あと気になることがひとつあります。
VS C# 2008 ExpressEdition は、プロジェクトのテンプレートに、
「WPF ユーザー コントロール ライブラリ」が在りませんが、
このためインポート機能もカットされているとかあるのかな・・・。
WPFって全く普及する気配がないんだけれど、このままいつものごとく 放置され無かったことにされるMSのテクノロジの山への葬列に加わる ことになるのかいな。 ソフトウェア・アーキテクチャとしては考え方はよかったのかもしれないけれど、 なんだか分かりにくいよね。 ウェブアプリケーションまで飲み込もうと、xbapみたいな もんまでスコープにしたもんだから、プログラマからすると、単に使い勝手が悪く 融通の利かない環境になってしまったような気がする。
いや、パフォーマンスさえよければすぐにでも使いたいんだが。 Silverlightは使われそうだけど、WPFはどうなるのかなー
だからxamlと切り離してFormsにぶつければ一気に普及するとあれほど(ry
904 :
デフォルトの名無しさん :2009/06/07(日) 17:38:54
Silverlightは3からブラウザの外で動かせるようになるからな あとはMSがセキュリティの制限を解除できるようにしさえすればWPF完全終了
セキュリティ制限が解除されて使えるようになるのはファイルアクセス位だろ。 DllImportとかは機能自体が削除されているのでどうにもならん。
ビットマップフォントに対応すればそれなりに使われると思うよ やっぱり見た目って大事だから
妄言がはなはだしいな。あーすれば普及するこうすれば普及するとか。 特にビットマップフォントはかんけーねーよ。 海外でも普及してねーだろーが。
>>903 XAMLがWPFの大きな魅力の一つなのに切り離してどうするw
WPF のコンテキストメニューにはグループとか排他項目とかないの?
みんなの作っているWPFはアニメーション付ける派?つけない派?気持だけど付けてる派?
付けるけどOFFにも出来るようにする。
っていうことは、ザムルの外にアニメーション指定の命令をするかを書くのか。 めんどくさくない?w 挑戦したんだけど、どうもうまくまとめられずいろんなところが狂いだしてどうすることもできなくなった・・・ 気をつけてw
ザムル・・・ ・・・ある!
ストーリーボードでボタンにアニメーションを付けた。
916 :
デフォルトの名無しさん :2009/06/09(火) 15:53:40
アニメーションの切り替えはテンプレート丸ごと差し替えたほうがよくね
アニメーションの効果的な使い方がよく分からんし、何よりセンスがない。 って事で、ユーザーの邪魔にならない所でヒッソリ使う程度だな。 UIデザインをこなせるデザイナがもっと増えてくれれば、俺の付け焼刃のデザインなんて使わなくて済むのに
遅ればせながらこれからWPFの勉強を始め用と考えています。 参考書籍はどの順番で読めばいでしょうか? (A)エッセンシャルWPF (B)黒XAMLプログラミング ※赤坂本は破棄するとして、日向本も索引にDependencyが無いので論外とします。 またはMSDNの概説・サンプルの方が情報が新しく併用するのがいいのでしょうか?
>918 Aは一番最初。ただし、うんちくや背景思想を知りたい人だけが読めばいい。
たいした金額じゃないんだから全部買っとけ
DrawingImage を表示させているボタンがあるんだけど、 IsEnabled = false にしただけでは、灰色になってくれないのね。 DrawingImage を灰色にはどうしたらいいですか?
背景色が灰色なら、半透明にするのが一番楽だな
WPF IN Action読んだ人いませんか? いたら教えて欲しいのですが、P279(Chapter12 Validator)のとおりに コードを入力し、説明にあるとおり同じ値を入力後、フォーカスを移動 してもデフォルトの赤枠が表示されません。他に設定が必要なのでしょうか? <TextBox> <Binding Path="Title"> <Binding.ValidationRules> <ExceptionValidationRule/> </Binding.ValidationRules> </Binding> </TextBox>
924 :
923 :2009/06/10(水) 12:19:50
環境は Win XP SP3 .NET3.5 SP1 です。
>>923 はてなポイントつかって向こうで聞けばいいんじゃね?
>>925 レスどうも。
そうですね、サポートページ探してみます。
927 :
923 :2009/06/10(水) 16:04:41
自己解決しました。
自己解決って報告するくらいなら情報共有のために解決内容かけよ。
>>928 そうですね。
単なる操作の勘違いでした。
あるレコードを選択後、Titleテキストボックスに表示された
値を存在する別のレコードのTitle値に設定すればOKです。
XAMLでUIが書けるのはいいけど、かっこいいグラフィックにするやり方がよくわからない 何か別にOffice風だとか○○風だとかのデータを持ったものを指定するだけとかの仕組みが有れば良さそう
そういうのをXAMLでゴリゴリ書くと泣きたくなるからなぁ。 そういうのは、Blendでかくもんじゃない?
snow leopardのExposeみたいのやろうと思ったら結局コードがりがりかくことになるよなぁ・・・ まぁやっとこロジックごりごりかくべき所とXAML的にやるべき所の見分けが付いてきた
WPFとWindows.Formとどう使い分ければいいの? 長期的にはWPFに全面移行するのかな
Windows2000でも動かしたければWinForm使うしかない。 そうでないなら好きなほう使えばいい。
>>935 2000では動かないの?98は無理だけど。
>>936 2000には.NET 2.0までしか提供されない。
という事で、WPFだけじゃなくてLINQなんかも使えない。
Windowsって入ると短命なイメージが付くから失敗だったな ただのPFで良かった
>>935 まさにそういう理由で、客のユーザーが2000使ってる人まだいるってことで.NET2.0しばりですよ・・・
WPFで今スライドショーっぽいものを作っているんですが、うまく画像が表示されずに困っています。 <Image Margin="0" Name="img"></Image> こんな感じでImageタグを用意しておき、img.Sourceを変更させてやろうと思っているのですが、画像が表示されません。 ウィンドウをShowする前にimgにソースをセットしておけば、その画像だけは表示されるのですが、それ以外は表示されません。 ソースを変更→スレッドで5秒ぐらいとめるなどという処理方法で書いているのですが、どこに問題があるのでしょうか? どなたか分かる方よろしくお願いします。
>スレッドで5秒ぐらいとめる これがなんか怪しくないか?
DispatcherTimer使っとけ
944 :
944 :2009/06/12(金) 00:49:57
>>942 、943
スレッドが怪しいということなので、とりあえずスレッドを使わずに実験してみたのですが、
それでも画像の更新がうまくいきませんでした。
今使っているコードはこのようになっています。
BitmapImage bmp = new BitmapImage(new Uri(image_paths[0]));
img.Source = bmp;
this.Show();
for (int i = 1; i < img_paths.Length; i++)
{
bmp.UriSource = new Uri(img_paths[i]);
img.Source = bmp;
// Thread.Sleep(5000);
}
this.Show()はスライドショーは作業ウインドとは別ウィンドウでやろうと考えているため、このようになっています。
BeginInit&EndInit 質問する前にMSDNに載ってるサンプルコードぐらい読め
ボタンの IsEnabled に、あるプロパティが0だったら false 1以上だったら true を設定したいんだけど、IValueConverter を自分で実装するしかない? それとももっといい方法ある?
ない
DataTrigger
XAMLの方にClick=""みたいなの書いたら作業ロジックとの切り分けにはならない? とかがよくわからない
XP規定フォントであるMS UI Gothicの表示がヤバ過ぎる
951 :
946 :2009/06/12(金) 22:18:02
>>947 やっぱないすかぁ。
>>948 オレへのレスだよね?
DataTrigger って「1以上」って指定はできなくね?
>>951 0だったらfalse、1以上ならtrueってことは
結局、0か否かなんじゃねえのか?
>>950 だから、XPでメイリオが使えるようになったのだろう。
ビットマップフォントの表示にさっさと対応汁>MS
beta2までまて
956 :
946 :2009/06/14(日) 20:06:54
WPFの日本産フリーソフトって何がある? 参考にしたいんだけど、どいつも海外産で登録制の物しかないし、参考にするものが無い
もうすぐ配布がはじまるVisualC#2010なんてどうかね?
>>957 MiniTwitterとか、O2Handlerとか
他にはないの?
WinFormsのコントロールの方が質が上だから普及しないね
そうですねー
デフォがもうちょっとシンプルだったらなー、とは思う まあテーマ適用すりゃいいんだけど
Blend2SP1とVS2008でいろいろやってるけど 選択時のスタイルとかもうちょっと簡単に設定できていいと思うんだ
965 :
デフォルトの名無しさん :2009/06/18(木) 08:54:14
wpfって正直作ったやつのオナニーのような気がする。 確かにアーキテクチャの着想は悪くないと思うけれど、こんなに使いにくいもん 普及するわけがない。そもそもxamlで何でもかんでも「簡単に」やろうとしすぎて 複雑かつ難解な仕組みになってしまったような気がするよ。
そうだろ? 俺が何回もxamlと切り離して普及させるべきだって主張してるのにこのスレのやつらは メリットがなくなるとかいいだすんだよ まったく困ったチャンたちだぜ
? 普及って、開発者に対してだろ? 解説ページでも本でも好きに書いて啓蒙したらよいのでは?
XAMLは簡単すぎて、何かやろうとすると、記号パズルや「頭の体操」に なってる気はする。
>>966 XAMLと切り離すとかアフォかとwww
って内容のレスを以前もした気がする。
お前は何度同じ話を書けば気がすむんだ?
まったく困ったチャンたちだぜ
とりあえず今のWPFは未実装なものが多すぎるからな 将来もWPFという名前のままか分からんが、実装度合いが進めば ある程度、浸透はするだろ
今後Windows Formsは残るがバージョンアップは期待できない。 徐々にWPFに移行するだろう。
VisualStudioのShellとして採用されることでマシになると期待してるよ
973 :
デフォルトの名無しさん :2009/06/18(木) 18:55:20
どこをどう読んだらそういう解釈になるんだw もしかして原文読まずに、そのトンデモ翻訳を元にそう書いてるのだったとしたら ちょっとおバカちゃんすぎるだろ。 ちなみに原文の内容は、WPFのある解説本の初版は .NET3.0をベースに書かれていてお勧め出来るものではないが 第2版は.NET3.5を対象に多くの点で書き直されており、 お勧めだぜ!とかそんな内容。
財団ってw
XAMLの発想をWinFormsに移植、そして生まれ変わるMDXによるリッチコンテンツへのサポート
>976 そういう感じの作った。 Form上だけど好きなエレメント組み合わせて描画できるようになってよい感じ。 MDXに乗っけられればBitmap転送速くなりそうだ。
第一段階:Forms を WPF に置き換え 第二段階:xaml普及 ってやればいいんだよ まったく困ったチャンたちだぜ
>>978 2chで「俺だったらこうするね!」と主張する事に何の意味があるのだろうか。
馬鹿なの?暇なの?困ったチャンなの?
そこから話が盛り上がり、はたまた恋が芽生えるかもしれないだろ!
それだ!
>>977 今から作るならDirect2Dに乗せようぜ
983 :
デフォルトの名無しさん :2009/06/19(金) 02:01:19
意味わからん DirectX使うならWPFベースでいいだろ
>982,983 とりあえずもう9割がた作ったが、Formをただのキャンバスとして扱ってるだけなのでそのうちD2Dとかにのせるかも。 もうすこしWPFに普及の兆しがあればこんなの作る必要もなかったんだが・・・兆しというかパフォーマンスだな。 いろいろ柔軟に複雑なことできそうだけど、一般ユーザーに使わせるシステム作るには対象が限定されすぎ。 Silverlightの方がいろいろと広まりそうだ。そこからWPFも見直されてきそうだけど。それらに全面的に切り替えが許容されるには後1,2年はかかりそうだな・・・(´・ω・`)
Direct2Dは技術的にはともかく、Vista以上でしか動かないので話にならん。 まだまだXPは切れない。
986 :
984 :2009/06/19(金) 08:56:42
おれはユーザーに2000がたくさんいるとかいわれてForm以外選択肢なかったよ(´;ω;`)ウッ…
987 :
デフォルトの名無しさん :2009/06/19(金) 08:58:43
完全にオナニーだなw DirectXに載せるならXNAとかMDXとか使ったゲームなどへの組み込みをターゲットにしたら? まだそれなら需要あるでしょ
いまどきMDXとかありえねー
989 :
984 :2009/06/19(金) 09:08:39
いやうちで作ってるの業務系だし・・・ 趣味でゲーム作るときには使うかもしれんが。 MDXはも一度復活してくれんかなー Windows7で2D描画速くなるらしいがあれはDirect系とは別物なのかね?
990 :
デフォルトの名無しさん :2009/06/19(金) 09:15:26
いや完全にDirect3Dです Direct2Dはそれに皮を被せただけ
埋め
検討中か。 WPF4.0の次ってことになると、 さすがにそろそろXP自体が切られる可能性もありそうだが。
埋め
WinFormsはとにかく設計がクソすぎる。
古いやつの上に乗ってるんだから仕方ないってのは分かるんだけどねぇ
>991 すばらしい。時間で着たら見てみる。 >997 おまえはその前のWndProc,MFCを見たことがあるのかとこ一時間
1000 :
デフォルトの名無しさん :2009/06/20(土) 01:18:06
1000なら、Visual Stido 2010が開発失敗して発売大幅延期、 WPFが使い物にならないと証明される
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。