WPF(XAML, XBAP, .NET4.0)GUIプログラミング Part15
乙
WPFでソケット通信を実行するときは、その手続きはどこに書くべきなんですかね?
MVVMだとDB接続はモデルに書くらしいんですが
今回はソケット通信でデータ受信するだけでなく、短い文言も送信しますし
相手方の応答に応じて、分岐とかあったりします
View:なるべく書かない。画面遷移くらい。
ViewModel:画面で完結する処理を書く
Model:他はすべてここ
VMに書け
以上
文言もモデル化できるとしてModelが妥当
メッセージパッシングとかまさにそんなんだろ
>>5 >>7 そうなんですか・・・
MVVMのモデルってでかいんですね
モデルをDBのレコードとしか考えない
理由が無い
画面と処理を分離させるのがポイント
画面がいくら変わっても表示させたいデータが変わらない限りはModelは何も変えなくて良いように設計する
だから、データの見せ方に関わる動きはViewModelに書く
なるほど
DBからDataTableを持ってくる処理はModelに書くとして、Viewではそれを行列反対にして表示する場合
その行列を組み替える処理はViewModelなんですかね?
そんな感じ
ありがとうございました。
15 :
13:2013/02/03(日) 20:39:31.97
言っとくけど、俺はWPFでアプリを作ったことがない
VS2012でx64のWPF開発してるんですが、未だにデザイナはx64に対応しないの?
語弊がありそうな書き込み発見
>>17 どれ?
WPFのプロの方、教えてください。
WPFは終了しました
20 :
デフォルトの名無しさん:2013/02/04(月) 11:45:00.27
Borderの中にコントロールを入れて、そのコントロールが水平・垂直に真ん中に配置されるプロパティーってないんですか?
なんかAndroidとかと比べて、コントロールに親子関係がないような
子要素のHorizontalAlignment/VerticalAlignment
22 :
デフォルトの名無しさん:2013/02/04(月) 12:16:18.22
3.5までしか触ってないんだけど、セパレータって縦置きできるようになった?
確認してないけどできない
>>21 それをやっても、ボーダーに対して真ん中にならず、恐らくGridに対して真ん中になるです
なんだか状況がおかしい気がする
ほっといても真ん中だし
gridに対して真ん中って表現もおかしい
だったらグリッドのマス目のコラムの幅変えてみて場所が変わるか?
Borderと子コントロールの話だったのにどっからGridが出てきたのか
28 :
24:2013/02/04(月) 12:36:00.01
すいません
勘違いしてました
全てのコントロールがGridに対して子になっていただけで、Border →StackPanel → 子コントロールと入れ子にしてから、
各子コントロールのプロパティーをいじらないといけなかったようです
ありがとうございました
ずこ
Settings.settingsってそのままModelとして使ってもいいんでしょうか
それともラップするクラスを作るべきでしょうか
別にそのままでいいよ
多角形のボタンってどうやって作るの?
wpf 丸いボタンで検索して丸を多角形に変えればいい
マルチスレッドって、Backgroudworkerあればあとは使わない感じ?
NotificationWindowってどうやって使えばいいかわかりますか?
AndroidのToastみたいなポップアップを出してみたいです
あんまBackgroundWorkerこそ使わなくなったな
専らTaskとDispatcher.Invokeで済ます
WPFでBackgroudworker使ったことないな
非同期とかRxしかねーだろ
WPFというより4.0ではいらない
Rxはオワコン
非同期はasync,awaitの方が使いやすいし、
リアクティブプログラミング支援ライブラリとしても使いにくい。
他におすすめのライブラリあるのか?
必ずライブラリを使わないといけない強迫観念にでも落ちいってんのか?
Rx自前とかアホか
今度はRx教ですか
MVVM教といいしなねーかな
殺したい
LINQ教もあるの?
たぶんあるね
C#はC/C++の代用としてがっつりデスクトッププログラム書きたい奴と
JavaScriptとかPHPとかの代用としてWEBアプリとか書きたい奴がいて
お互いに相容れなそう
設計思想とか全然違っちゃうしな
おいおい、MVVMは定義が曖昧すぎて理解不能で利便性の欠片も感じられないが、Rxは最高だろおい
.NET Framework内にReactiveって単語が含まれたらRx戦争終戦で
ViewModelって単語が含まれたらMVVM戦争終戦にしよう
LINQは別に宗教じゃなくてすでに言語の一部だろ
WPF用にプロパティ作るのもメソッド作るにも普通に使う
LINQなら一行でサクっと済むのが、
使わないと同じことするのに行数と文字数が何倍にもなるし。
EF教ならまだ分かるがLINQ持ち出すあたりにわかすぎw
>>40 リアクティブとして他に良いのが有るならぜひ教えてくれ。
RxとMVVMの組み合わせはすこぶる良い感じです(´・ω・`)
まだLINQ敬遠してる土方もいるしな
なんで新しいこと覚えられないのにWPFやろうと思うんだろう
スレ違いは承知の上、ついでだから教えて欲しいんだがLINQをキチッと勉強するのにいい教材とか何かない?
上っ面程度のことは分かるんだけど、何ができて何ができないか、全体が把握できてない
用途は主にLINQ to Object
普通のSQL覚えればいいと思うよ
プログラミングやるなら何にでも使える必須知識
今時LINQ == クエリ構文って認識は古いってレベルじゃないと思うな
Rxとの組み合わせがいいって
ReactivePropertyのこと?
LINQはコレクションというかデータソースとでもいうのか
そういうのを簡潔に回すが全てじゃね?見つけるでもいいけど
簡単なもの(横1920のモニタでメソッド形式でなら1行で書ける程度レベル)ならメソッド形式がいい
でも複数のコレクションを結合させて混み入った条件つけて抽出したり、
メソッド式でも一行で収まらないくらい長くなる場合はクエリ式の方がいいよ
1920なら220文字は行けそうだ
Update2 CTPのBlendより前からでてたPreviewの方ができがいいな・・・
コードビハインドに書くのって画面遷移とコントロールの設定くらい?
ソケット通信の受信結果をListBoxで表示するプログラムを書いています。
受信時間の昇順に並べて、
スクロールが最下部にある場合に新しいデータを受信したら、
スクロールを一番下に移動して最新データを表示させたいと考えています。
これをやるにはListBoxのテンプレートをいじらないといけない感じでしょうか
>>64 なんかすげー似たようなアプリ作ってるな
俺もソケット通信の小さなアプリ、WPFで作っているわ
質問には答えられんがタイムリーなので
テンプレートまったく関係なくない
>>64 ListBox.ScrollIntoView じゃ駄目かい?
>>65 案外同じアプリ作ってるかもしれませんね
>>66 ListBoxのScrollViewerいじってるんですがどうもうまく機能しないんですよね
それでテンプレートいじったらなんとか実現できないかと思った次第です
>>67 常に下スクロールするのであればそれでよいと思います。
しかし、ユーザが上にスクロールしている場合には下スクロールさせたくないのです。
上のデータを見ているときにいきなり最下部にスクロールしてしまってはユーザが困惑してしまうと思うので。
まあ、素直に受信した降順に並べれば悩む必要ないんですが
スクロールが一番下にあるときだけScrollIntoViewするBehaviorでも書けばいいんじゃないですかね
そんな特殊な振る舞いをわざわざBehaviorにする意味は?
コードビハインドとなんも変わらんというか無駄に複雑になるだけ
FormにしろWPFにしろリストボックスは遅いんだよ
これはWindowsそのもののGUIがプアだからどうしようもない
OS X最強なんだなこれが
勝手にUITableViewDataSourceでも使ってろ
>>68 ScrollViewer がうまく機能しないっていうのは、どういう状況で何が機能しない?
>>58 ん、そんな感じの。
ReactveUIでも良いかもね
>>74 あまりうまく説明できないかもですが、
今はScrollViewerのScrollChangedが発生した時に、受信データ数が増えていて、スクロールバーの高さが以前のスクロールバーサイズ以上の値だった場合に最下部にスクロールするようにしているのですが、
これだと連続で複数のデータを受信した場合にきちんと最下部にスクロールしません。
LivetでVMからのMessenger.RaiseでBringIntoViewするものを即席で作ってみたけど
ListBoxのItemsPanelがVirtualizingStackPanelだから
VMがコントロールと結びついてないと反応しねぇ。
こういう場合どうするんだろう。
>>76 ListBox.UpdateLayout を使って強制的にレイアウトを再計算させるか、
Dispatcher.BeginInvoke(hoge, DispatcherPriority.Loaded) を使ってレイアウト計算後にスクロール処理を走らせてみては?
もしくは、ListBox.ItemContainerGenerator の StatusChanged イベントを待つとか。
最初の ScrollChanged が発生した段階では、後に受信したデータの ListBoxItem 要素が生成されてないのかも。
79 :
デフォルトの名無しさん:2013/02/05(火) 23:39:43.87
WPF初心者なんですが、ユーザーコントロール作る場合は、元々のユーザーコントロールを相対配置して作らないといけないんですかね?
XAMLからViewModelのメソッドってどうすれば呼べますか?
Click="ViewModel.Ok"とかでいけます?
いけません
>>78 即レスありがとうございます。
それだといけそうな気がしてきました。
改修長くなりそうなので結果報告は明日当りになると思います。
>>81 じゃどうするんですか?
わざわざコードビハインドにViewModelのメソッドを呼ぶメソッドを作る感じ?
いけません。じゃねーんだよw CallMethodActionくらい教えたれやw
CallMethodActionなんてクソ冗長なもの使わなくても添付プロパティで
<Button CallMethod.EventName="Click" CallMethod.MethodName="Ok"/>
みたいに書けるようにするのは割と簡単にできる
添付プロパティの勉強には丁度いい
ここでFWの上に自作FW載せる的な解はどうかと思うんだがw 確かに可能だし簡潔だが
86やるなら、MSのPasswordHelperあたり見たらいいぜ
76ですが、受信のたびにUpdateLayoutかけると一番したにスクロールさせることができました。
ただ、自分がListBox内に重い処理をしていることもあり、かなりもっさりしてしまいました。
なので無理に昇順にひょうじさせるのではなく、降順にならべてスクロールしない方向でいこうかと思います。
複数の画面で全く同じリストを選択させるリストボックスがあって、そのリストの値ををXAMLのResourcesDictionaryに書く場合は、
XAMLをコンパイルする段階で値が決まっている必要がありますか?
ユーザーコントロールにしろ
<StackPanel Orientation="Horizonal">
<RadioButton HorizontalAlignment="Center"/>
<RadioButton HorizontalAlignment="Center"/>
</StackPanel>
これでラジオボタンが水平方向に二つ、並ぶはずが左寄せです
原因はなんでしょうか
親がHorizontalなStackPanelであること
すげーワラタ
>>93 ありがとうございます。
確かにOrientatinはずしたら真ん中に寄りましたが、垂直方向に二つ連なりました
水平方向に、二つのラジオボタンを中央よりに配置させる方法はないんでしょうか?
AndroidのXMLだったらできたのですが・・天井
StackPanelのHorizontalAlignmentをCenterにするとか
既定ではStretchなのでStackPanelの横幅は親コントロールと同じになる(マージンとか除く)
CenterにするとStackPanelの横幅は子コントロールを描画するのに十分な横幅だけになる
>>95 Grid.ColumnDefinitions使ったほうがいいんじゃないの?
やっぱりWPFはだめですね
テキストボックスを継承したカスタムコントロール作ったんだけど、おいても何も表示されない
どういうことですか?
そーゆーことですな
ViewModelからViewを操作ってみんなどうしてる?
ダイアログや画面遷移くらいは妥協して、ViewModelでやってしまいそうだ
IHogeViewインターフェイスとコードビハインドだな
メッセージは嫌い
ダイアログや画面遷移はむしろVMからサービス呼び出す形の方が再利用が利いていいと思う
サービス?
メッセンジャーは使いづらいよなぁ
>>104 サービスはPrismの画面遷移を見ればわかる
要は差し替えさえ可能ならいいわけで、MVVMの枠にとらわれないでやるってことだ
そんなまどろっこしいことしなくていいよ
インスタンス作ってShowしちまえ
Prismの仕組みは知らんが抽象的な画面遷移サービス的なの作ってそこに対してVMからお願いすればいいんじゃないかね。
テストなどではUIは空っぽだけど、実際にはそのVMに対するUIとか引っ張って来れてそれに対してダイアログ出すとか。
おまいら、お絵かきアプリみたいの作るとしたらどこまでMVVMとか使う?
MVVMでなくてもいいんだけどいろいろなロジックをどこにどう分離するかを聞きたく。
あとShapeを使おうと思ってるんだけどこれのあたり判定とかってShapeを列挙してできるもんだっけ?
あるPointをもとにそのShapeが上にあるかどうかを判定するような。
できるんだっけ・・・って。前は知ってたんだろうな。
ShapeはUIElementだ。他のコントロールでできることならできる。
UIElementでできるかわからんです(´・ω・`)
できる。shapeに括る必要がないことだしggrks
Geometryを使うのが一番straightforwardな方法
そういうのはMVVMあんまり有効に働かないと思う
図形のデータモデルをCommandデザインパターンでいじくり回して
それを自作コントロールの描画キャンバスで可視化するって考え方でいいのでは
VisualTreeHelper.HitTestで望みのが出来そうでした。Geometryでもいけそうですが、未確認(´・ω・`)
けどストアアプリでも同じようなの必要だったんだけどそっちだと類する奴が見つからん。どっかにあるのかしら…(;´Д`)
ストアアプリはVisualTreeHelper.FindElementsInHostCoordinatesで出来るみたいですね。
この辺の微妙な違いはどっかで調整しないのかしら…(´・ω・`)
しかしかずきはレベル高いよな
あの若さであれだけなんでも知ってるってすごいわ
俺なんてMSDN見ても理解できないからググってとりあえず使い方だけ覚えて実装してやり過ごしてるが、基本からすべて理解とか頭良すぎる
どうやったらあの領域まで上れるんだが・・・
理解できないんじゃないだろ。理解しようとしないんだw
そうやってあちこちでまぁいいやって逃げてたら、基礎がないからなにもかも理解できないわ
ただかずきはフォーラムでけむたがられてる気がする
自分の見た範囲ではフォーラムであまり有益な回答を
してないのでポイントを貰ってない
本人はそのことをどう思ってるのかちょっと気になる
ネットwatch板でやれ
たまたまかもしれないけど
大体一番最初に回答してて3〜4行ぐらいの回答
それでわかるなら質問してない気もするんだけど
であとの人がコード付きのていねいな回答しててそっちにマークがされてる
しょうもな
批判は余所でやれといいたい
だがみっと氏はいったいどこまで詳しいんだと、ひたすら感心するわ
昔いたMVPの人も詳しかった
全然blogも更新されなくなってどうしたんだか気になる
124 :
デフォルトの名無しさん:2013/02/07(木) 20:32:52.21
カスタムコントロールについてお聞きします。
1つめ
TextBoxを継承したTextBox2のDefaultStyleにTextBoxを指定。
TextBox2を継承したTextBox3のDefaultStyleにTextBox2を指定した場合、何も表示されないのはなぜなのでしょうか?
TextBox2のStyleを指定したのだから、TextBox2のStyleに指定されているStyleで表示してくれないのですか?
2つめ
上記で作成したTextBox2のTextをOverrideして、そのTextが変更された時に他の添付プロパティを弄って変更通知を出したいのですが、どうしたらいいでしょうか?
よろしくお願いします。
125 :
かずき:2013/02/07(木) 22:36:26.66
最近なかなか、パソコンから回答ができなくて…。短い回答になってます。
LivetのHP見れない?
DataGridのDataContextって、DataTableではないとダメなんですか?
カラム名と同じ名前のプロパティを持させたクラスを与えてもバインドされないんですが・・・
バインド先はItemsSourceだろ
型はIEnumerableだから、IListSourceのみの非型付DataTableは無理じゃねえかな
ListBoxにDataTableをバインドさせて、列名を指定して、それを表示させたいんだけど、どうすればできますか?
リストとかならできますが、DataTableはよくわかりません
>>127 リストでもコレクションでも行けるよ
DataSource設定してる?
してるならカラムでバインドがうまくいってないんじゃないのかな
WPFのdatagridとEFは相性が悪い
WPFでDataSet系は使わないな
134 :
127:2013/02/07(木) 23:34:16.80
↓ この例だと何が欠けているのでしょうか・・・
namespace MVVM
{
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
var m = new Model();
m.no = "123";
m.id = "456";
m.flag = true;
dg.DataContext = m;
}
class Model
{
public string no;
public string id;
public bool flag;
}
}
}
<DataGrid AutoGenerateColumns="False"Name="dg" ItemsSource="{Binding}">
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding Path=no,Mode=TwoWay}"></DataGridTextColumn>
<DataGridTextColumn Binding="{Binding Path=id,Mode=TwoWay}"></DataGridTextColumn>
<DataGridTextColumn Binding="{Binding Path=flag,Mode=TwoWay}"></DataGridTextColumn>
</DataGrid.Columns>
</DataGrid>
> public string no;
public string no { get; set; }
オブジェクト一個だけ入れてどうするんだよ
コレクションに突っ込んでコレクションをDataContextに入れる
それ以前に何がしたのか判らねえ
WPFのDataGridはやめといたほうがいいぞ
どうせ後でWindowsFormsHost+DataGridViewに移行することになるから
>>124 1.そういう謎仕様
2.カスタムコントロールの添付プロパティを新規で作るのは面倒臭いからやめとけ
List<Model> modelList=new List<Model>();
var m = new Model() { no = "123",id="456",flag=false };
modelList.Add(m);
dg.DataContext = modelList;
class Model
{
public string no { get; set; }
public string id { get; set; }
public bool flag { get; set; }
}
>>135-136 工数の問題でプロパティは省きました
プロパティを実装し、
var list = new List<Model>();
list.Add(m);
dg.DataContext = list;
これにしたら表示されるようになりました
ありがとうございました。
>>137-138 もう既にWPSである程度つくってしまいました・・・。
DataGridをWPFで作る意味が分からん
重いし遅いしどうせWPFのメリットも活用できないんだからそこだけWindowsFormsHostでいいのに
重いのは昔だけだろ
最近は改善されてるし、Winformsを混ぜるのは正直気持ち悪い
WindowsFormsHostは表示がヒドイ
vs2012でデザイナは上手く動くようになったのか?
>>145 関係ない
WindowsFormsHostはUserControl載せるもんだ
WinFormsのUserControlのデザイナで作ればいい
表示壊れなくなったりスプリッタがまともに動くようになったら使ってもいい
お前らは同時に何行出してんだよw
仮想UIって表示しているところだけリソース喰うんだろ?なら軽そうじゃん
>>148 WinFormsと比べてみりゃわかるよ
次元が違う
画面上のコントロールを操作したい場合って、コードビハインドに書くしかないの?
できればすべてViewModelでなんとかしたい
>>150 そういう思考から脱却できないなら諦めてコードビハインド使っとけ
MVVMは論理的な状態が変化したことによって結果的にコントロールの状態が変わるんだよ
>>152 そこまでしてイベントハンドラを使わない意味が分からない
その点には触れてないし分かりづらいだけで実質イベントハンドラそのものじゃねえか
Viewは本来無くてもいいってことを理解してもらわないと
155 :
124:2013/02/08(金) 00:19:49.86
>>139 そういうことなんですか?
2つ目はどうにもできないのでしょうか?
なんか実用度外視だよな
VMに何でもさせるんじゃないよ
VからみるとVMもMも変わらない
ただのモデルにしか見えない
V → (VM+M)
MVVMのこういう記事読むと
本 末 転 倒
この言葉が頭に浮かぶことがなんと多いことか
V+VM M
こうだろ?
>>159 それは勝手に人間様がそう思ってるだけで
Vから見たらVMはV側じゃないM側
ビジネスロジックが〜って言ってるのは人間だけでコード上は
VMはVの下請けじゃない
あらゆる物をゴールデンハンマーで解決しようとすんのは雑技よね
あるいはcode golfに近いか
そんなもん初心者に読ませないで欲しい
>>160 でも実際の役割はそうだろ?
VMでVが表示するためのプロパティ作ってるんだから
いいえ
VからM見る(binding)のも
VからVM見るのも
同じ
セグメント?が変わると区分も変わるだろうけど…
視点を変えればそう捉えることもできるだろう
仮想マシン側からILを見ると、C#もVBも大差ないようにね
>>163 宗教論争してもしょうがないけど自分はVMはVに画面表示に専念させる為のブリッジだと思うけどね。テストなども考慮した上での。
XAMLでColorAnimationのStoryboardを定義したとして、実行時に値によってFromの色を変えるような事って出来たっけ?
具体的には値が変わった時、前よりも値が増えた時と減った時で色を変えようとしてます。
変わった時点でその前のStoryboardを止めて新しいのをスタートさせてる。
コードビハインドで書いた奴は思った通りに動いたけれど。
定義だけXAMLでそのスタート、ストップはコードビハインドでも構いません。
またお前か。動いたんだしそれでいんじゃねーの
より良い書き方を追求するのは良いことだろ( ´Д`)y━・~~
俺は良いと思わないので却下
なぜWPFのコントロールはvisibility=falseで表示になるんでしょう?
>> 171
Visibilityに設定できるのはVisibility列挙値(Visible,Hidden,Collapsed)だけ
それ以外の値(true,falseとか)は無視されるので
デフォルト価のVisibility.Visibleになってるだけだな
DataGrid_CellEditEndingイベントの引数eから、DatagridCellの参照を得るのは無理なのでしょうか
e.EditingElement as DataGridCell
はnullでした
デバッガで止めて引数一通り確認することから始めれば
>>175 e.RowからDataGridRow
e.ColumnからDataGridTextColumn
が取れました
createGraphicsがないんだが
急にレスが増えたNE
そうですか無いですか
無いんですよWPFにはそういうの
絶望した?した?
依存関係プロパティの簡単な作り方ってあります?
{get;set;}みたいなものは無いのか?ってことならそんなもんないよ
言語が支援してるわけじゃねーもん
propdpと打ってTab二回
あの宣言の面倒くささには
IDEがあるにしても限度は必要だと感じてしまうよな
新規で作った依存関係プロパティのセッターで初期から用意してある依存関係プロパティを操作したいんだけど、これはオーバーライドする感じ?
かずきさん、ここ見てみみたいなんで要望あるんですが
Rx入門v0.1.pdfをもう少し初心者向けの解説増やしてもらえませんか?
具体的にはイベントに関してなんですが、neueさん等もWPFやWP前提でFormでどう使えばいいのか実装例含めて解説して欲しいです。
ツイッターかブログで直接言えや
こりゃあからさまに宣伝だな。臭過ぎる。
悲しいことにRxはもうオワコンなんだよ・・・
WPF自体 将来性はどうなの?
このままフォームアプリケーションと同時でサポートされていく感じ?
それともsliverlightのように死亡確定?
192 :
185:2013/02/08(金) 23:11:00.84
>>191 そもそもクライアントアプリに将来性がない
MSはHTML5を全面に押し出して今絶好調みたいだからこのままどんどんwebにシフトしていく
誰にもわからないと思うよ
このまま微調整だけくわえられていくのか
大幅に変わるのかも分からない
今のままだとフェードアウト確定
言語からサポートを受けるようになれば…
まあとれも深追いしないのがいい
>>192 プロパティの setter じゃなくて、DependencyProperty.Register に渡す PropertyMetadata の PropertyChangedCallback 内で処理する。
setter、getter はユーザーコードから使いやすくするための単なるラッパーで、フレームワークからは呼び出されない
(フレームワークがプロパティ値を設定・取得するときは SetValue・GetValue が使われる)。
197 :
185:2013/02/09(土) 00:04:16.26
WPFとしては分からんけどXAMLとしてはしばらく無くならんとおもうけどね。
多分WinRTでデスクトップアプリも作れるようにすると思うし。
HTMLはそれだけって風にはならなそうな気がするけど。
WinMDの実装技術としてHTMLも選べてネイティブと一緒にできるってのが正しいあり方な気がするわ
TypescriptでXAMLをナチュラルに使えるようになると面白いんだが。
199 :
196:2013/02/09(土) 00:29:14.67
>>197 のコード、ValidateValueCallback じゃなくて、PropertyMetadata のコンストラクタに渡す PropertyChangedCallback を使う。間違えてる。
ValidateValueCallback は値の検証用。
WPF フレームワークのプロパティ値は SetValue で直接値を代入した時だけメモリが確保される仕様。クラスのインスタンスは単なるハンドル。
インスタンスが作られた時に全てのプロパティ用にメモリを確保すると、メモリをバカ食いするし、他のインスタンスと同じ値ばっかりで無駄が多い、
あと、Style や VisualTree とかで同じ値に設定する状況でインスタンス一個一個の値を設定することになって重い。
それを避けるために、他と値が共有できる状況なら、値を共有して軽くしてる(プロキシ・パターンとかフライウェイト・パターン)。
200 :
196:2013/02/09(土) 00:33:41.69
訂正 VisualTree → VisualTree とかで使われるプロパティ値の継承
201 :
185:2013/02/09(土) 01:23:12.30
OnDateChangedのSetValueは、引数dが実体なんだから
TextPropertyにtextbox2を付けないとダメじゃね。subがsharedだし見えないでしょ。
>>201 どううまく行かないのか書いてないからわからんけど
バインドしてるプロパティの値を変えても、表示されるTextに変化がないってことなら
@XAMLでのバインドの仕方が間違ってる。OneWayないしTwoWayに。(OneTimeやOneWayToSourceではダメ)
AプロパティにINotifyPropertyChangedを実装してない
このどっちかじゃないかな
ちなみに、やりたいとこがDate型の値をyyyy/MMで表示したいだけなら
わざわざTextBoxを継承した独自のコントロール作ったり大がかりなことするより
Converterかました方がずっとお手軽だと思うw
あ、アホなこと言ってた。それはいいのか
あと入力されたときTextからDateValueに値突っ込まないとダメじゃね
>>201 新しいプロジェクト作って、そのコードと以下を追加して、実行してみたけど、期待通りに表示されたよ。
<StackPanel>
<local:TextBox2nd x:Name="_textBox2"/>
<Button Content="Set" Click="Button_Click_1"/>
</StackPanel>
Private Sub Button_Click_1(sender As Object, e As RoutedEventArgs)
_textBox2.DateValue = DateTime.Now
End Sub
最小限の構成で試してみたら?
207 :
206:2013/02/09(土) 12:31:12.87
あ、スペースを に変換して書き込んでしまった。削除して読み替えて。
208 :
185:2013/02/09(土) 13:23:42.08
>>203 TwoWayにしています。
バインドするプロパティにINotifyPropertyChangedを実装していなかったので、実装しましたが、
Textに日付の文字列が入ってくれません。
他にもお手軽な方法があるのがあったんですね、まぁいつかはわからないといけなくなると思うので練習がてらカスタムコントロールでやっていこうと思います。
>>206 実行してみましたが、DateValueに値が入っていることが確認できました。
自分もそこまでは行くんですが、それの後にTextに日付が入らないことが最後の問題なっています。
まさかここまで難しいとは思いもよらなかったです。
http://ideone.com/YLTgxE
ListBoxにRichTextBoxを張り付けて項目を表示しているのですが、
RichTextBoxをクリックしてもListBoxItemが選択されません。
RichTextBoxをクリックしてListBoxItemが選択されるようにするにはどのようにすればいいでしょうか。
>>208 そのコード、TextBox を継承するなら TextProperty を再定義する必要はないよ。
TextBox が公開している OnTextChanged を override すれば実現できる。
何らかの理由で TextBox.TextProperty の PropertyChangedCallback を置き換えたい場合は、
静的コンストラクタで TextProperty.OverrideMetadata メソッドを使えば可能。再定義は不要。
Bitmapに相対パスで画像を入れたいのですができません
Bitmap bmp = new Bitmap("test.bmp");
こう書いたのですがエラーが出て強制終了します
ファイル名を絶対パスで書くとエラー出ませんでした
ファイルはカレントに置いてあるはずなんですが、書き方間違ってますか?
exeとbitmapを同じフォルダに置いてexeを起動してみてはどうか
213 :
185:2013/02/09(土) 20:56:01.55
>>210 再定義をやめても、今までどおり動作しました。
Dateを入れたときにTextには反映されていますが、Textを変更した時にDateに反映されないのは
DateValueにPropertyChangedが実装されていないからでしょうか?
namespace Hoge
{
public class MyConverter : IValueConverter
{
}
}
<StackPanel HorizontalAlignment="Center"
VerticalAlignment="Center"
xmlns:local="clr-namespace:Hoge">
<CheckBox IsChecked="{Binding Flag, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged, Converter={MyConverter}}" />
</StackPanel>
コンパイルが通りません
エラー1XmlNamespace、Assembly または ClrNamespace が Mapping 命令にありません。 行 19 位置 41.
エラー2型 'MyConverter' が見つかりませんでした。アセンブリ参照が失われていないか、また、すべてのアセンブリがビルドされているかを確認してください。
何が悪いのでしょうか
理解不足なんじゃないの?
local:MyConverter
>>212 exeを起動してみたところ古いデータになっていて、デバッグなしで実行していたせいでした。
ありがとうございます
220 :
185:2013/02/09(土) 23:45:57.49
>>219 無事完成しました。
ありがとうございます。
ブレイク貼ったら全然通ってませんでした。
イベントにして解決しました。Shadowsでなんで走らなかったのかは謎ですが・・・
http://ideone.com/mYEQKK 身近にWPFに詳しい人がいなかったので、とても助かりました。
独学じゃ挫折しそうです。
ありがとうございました。
Shadows と Override じゃ全然意味が違うぞ。
>>210 は Private Shared Shadows Sub OnTextChanged(ByVal d As DependencyObject, ByVal e As DependencyPropertyChangedEventArgs) じゃなくて、
Protected Overrides Sub OnTextChanged(e As TextChangedEventArgs) を使えって意味だと思う。
222 :
185:2013/02/10(日) 01:00:04.08
>>221 >>220のLostfocusイベントのところをすでにあるOnLostFocusをOverrideしたら、同様に動作しました。
こっちのほうが見栄えがいいですね。
ありがとうございます。
これは依存関係プロパティとは関係ないのでSetValueとかではなく、通常のプロパティを弄る感じなんですね
やっといろいろ分かって来ました。
223 :
デフォルトの名無しさん:2013/02/10(日) 23:34:37.87
MVVMってエントリーポイントはどこになるんですか?
イベント駆動だと、StartupUriに書いたクラスのコンストラクタもしくはLoadedイベントに書くはずですが・・・
VMのコンストラクタでやるか、それでできないことならイベントハンドラからVMのメソッドを呼べ
それはアプリケーションが常にVMを生成することを担保しないといけなくないですか?
軽く調べてみたら、App.xamlのstartupuriを消して、startupにして
そこからVMとVを作るという方法があるようですが・・・
そんなもんMVVM関係ないだろう。App.Startupイベントでも使え。
MVVMはビューをスマートに実装する仕組み以上のものじゃない。一つのビューに閉じた話。
むしろMVVM的なものをアプリの何処で生成したらいいかって話じゃね?
Prismとかでググれ
formsで言うUpdate()やInvalidate()のようにコントロールを強制的に再描画させたいのですが、どうやればできますか
InvalidateVisual
でもWPFではDrawingを動的に変更するのはやらないのが基本。Visualを動かせば勝手に反映される。
頻繁なOnRenderとかもってのほか。
230 :
225:2013/02/11(月) 12:21:55.80
分からなかったのは
アプリケーションを起動したときに、最初に
DateContext = new Model();
とかやるじゃないですか
ここはどこでやるべきなのかなーと
Windows.csには原則何も書いてはいけないらしいですから、Viewではないですし
>>230 コンストラクタに書くのが普通
コードビハインドを書いてはいけないなんてことはない。それ以外のコードも書くし必要ならイベントハンドラも使う。
有象無象が発言した「原則」とかなんで信じるの?馬鹿なの
DIやサービスロケータを使わないのなら、VMが依存するサービス類の依存性解決もVで明示的にやることになるな
ほーらまたMVVM教が一人の初心者を狂わせたぞ
責任取れカス
テストのためのパターンなのにパターンそのものが目的みたいになってしまってるよな。
MVVMやるならVMの単体テストを書け。
Prismがなんでああいう構造になってるかなんて自分でテスト書いてみないと理解できない。
デザイナ用のデータコンテキスト(d:DataContext)もあるし、インスタンスの生成をどこでどう制御するのがベストなのかよくわからん
原則がなぜ存在するのか、原則を外れていいのは時はどんなときか
これらを知らないと原則を盲目的に守るしかなくなる
コードビハインドをあまり書くなってのは、単にUIに依存したコードはテストしにくいから
コードビハインドっていい事だよね
Modern用のKone見た人おる?
ViewModelにIDisposableなオブジェクトを持たせることはありでしょうか。
ViewModelもIDisposableにして、Window終了時に確実にDisposeを呼びたいんですが、
Closedイベントで (DataContext as IDisposable).Dispose(); とするのが普通ですか?
それでOK
ただas使ってるのにチェックなしでDisposeするのは変
必ずやるならfinallyでやるとすると、VM型の参照持っておかね
賛否あるだろうけど、標準でやれるのはソレだけだし、そうだと思う。
クラス10個は書かないでいいだろうけど…。
よく使われてるのは、汎用的なICommandを実装したクラスを1つ用意して、
それを使いまわして、個々の実装はデリゲートでメソッドを受け取るって形だと思う。
DelegateCommand とか RelayCommand でググれば分かると思う
>>246-247 ありがとうございました。
DelegateCommandについては上記記事にも書いてました
F#なら匿名型でかけるお(´・ω・`)
250 :
デフォルトの名無しさん:2013/02/12(火) 14:37:27.13
ラジオボタンのIsCheckedを触りたい場合は、VMにboolのメンバー変数持たせて、
IsChecked={Binding Path=変数 Mode=Twoway}
とするのが一般的ですか?
メンバー変数でなく通知プロパティとバインドさせるのは俺もよく使うが、
問題は「一般的かどうか」より「必要かどうか」だろ
変数じゃダメ。プロパティにしてやらないとバインドできない。
IsChecked={Binding プロパティ名, Mode=Twoway}
で行ける。
ラジオボタンという部分が軽視されてるね
質問の振りした多重ひっかけ問題かw
ラジオボタンならコンバーターを使って、
その一纏まりを全て1つのプロパティにバインドするのが楽だな。
テストコード書いて愕然とする人が多そうだね
257 :
250:2013/02/12(火) 15:26:31.34
ありがとうございます
仰る通り、プロパティにしないと駄目でした
なおかつ、Yes/Noの2つのラジオボタンがあって、そのIsCheckedを一つのbool変数で排他的に管理したかったら、
YesのsetにonPropertyChangedでNoのプロパティが更新したことを通知したりしないといけなかっり‥
コピペプログラマーにはWPFは厳しいようです
ちょっと!
違うでしょwww
コピペで作るには多少の理解も必要だろうなぁ。
覚えてしまえばコピペできるだろうけど。まぁ当たり前の話か
WPFでラジオボタンのIsCheckedにバインディングすると
更新時に問題がでるのでそのことを聞いてきたのかと思った
よかった、問題なんてなかったんだ
テキストボックスのContentを右寄せに規定値を設定したいのですが、うまくいきません。
どこがまちがっているのでしょうか?
TextBox2はTextBoxを継承したカスタムコントロールです。
コンストラクタに以下を書いています。
HorizontalContentAlignmentProperty.OverrideMetadata(GetType(TextBox2), New FrameworkPropertyMetadata(HorizontalAlignment.Right))
まずはデザイナいじって目的が達成できるレベルまで実験しろ
具体的にどういうことですか?
<TextBox HorizontalAlignment="Right" />が実現したい内容なのか?
HorizontalContentAlignment="Right"が実現したいことだったのですが、HorizontalContentAlignment.Rightが見つからなかったので
HorizontalAlignment.Rightを使用しました。
TextBox の HorizontalContentAlignment は扱いがちょっと特殊で DefaultValue なら TextAlignment が優先される仕様なので、
TextAlignment を OverrideMetadata するか、Style で指定したほうが良いよ。
>>267 そんな仕様だったんですか。
ありがとうございます。
Styleで指定する方法もありましたね
今XAMLのほうでやってみたんですが、
TextAlignment=center
HorizontalContentAlignment=left
左寄せ
TextAlignment=center
HorizontalContentAlignment=right
右寄せになってしまいます。
難しいですね。。。やっぱりHorizontalContentAlignmentをOverrideMetadataするしかないんですかね?
シコシコと15個ぐらいのIsEnabledをラップしたプロパティを書いていたら
CanExecuteで設定できることを今知りました・・・
この15個ぐらい書いた
private _IsEnabled
public IsEnabled
{
set { _IsEnabled = value; OnPropertyChanged("IsEnabled"); }
get { return _IsEnabled; }
}
ってどっかで有効活用できないものでしょうか・・・
CanExecuteはあんまり使わない方いいと、ここの方の教わりました。
Visibleも制御できたらよかったのに
>>269 何がやっぱりなのかわからない。単に既定値を右寄せにするだけなら
>>267 で達成できるはずだけど?
>>270 CanExecuteはコマンド一つ一つ個別に設定しないといけないから糞
コマンドを独立したクラスで扱う場合にはいいが一般的なMVVMには面倒なだけだからプロパティでいい
>>269 つーか、もうコンストラクタでフツーのCLRプロパティ方でRight突っ込めばそうならね?
>271
>273
分かりました。ありがとうございました。
DataGridのある行と行を比較して、内容が違うセルがあったらForeGroundを変えたいんですんが、やり方がわかりません。
DataContextはListコレクションです。
MVVM風じゃなくてとにかくゴリゴリ力押しで実装しようとして、
var dv = datagrid.ItemSource as DataViewとやったらキャスト失敗してnullになりました
だから、DataGridの行の参照変数ですら取れないんですが•••
>>271,274
それでも問題なくいけましたが、
>>267を勘違いしていました。
無事OverrideMetadataで実装することが出来ました。
>>276 ItemSourceは自分でいれたListが入ってるんじゃないのか
比較はそのlistつかえばわかるとして
色はC#ごりごりでこうやるみたいだな
//1行目
var dataRow = (DataGridRow)this.datagrid.ItemContainerGenerator.ContainerFromIndex(0);
//1番目のセル
var txtblock = (TextBlock)this.datagrid.Columns[0].GetCellContent(dataRow);
//赤にしる
txtblock.Foreground = new SolidColorBrush(Color.FromRgb(255,0,0));
あ、すまん
これじゃ再利用されたところが色かわっちまうのか・・
みなさんはドッキングってどうしてますか?
avalon dockを使おうと思ってるんですが、情報が無さすぎてどうにもできません
>>276 きちんとキャストしてあげてばいいんでない?
282 :
276:2013/02/13(水) 23:53:08.80
方法がよくわからないので、マルチバインドを試してみます・・・
ForegroundにマルチバインドしてコンバーターでBrushに変換するでもよさそうだな。
ListBoxのListItemの上にヘッダーみたいなのをつけることができますか?
ヘッダーの意図が分からんが、ListViewとCollectionViewSourceでグループ化?
286 :
276:2013/02/14(木) 22:28:34.75
PresentationFramework参照するのならApplication.Current.Dispatcherでイケるよ
>>285 DataGridみたいなものをListBoxで作りたいと思ってます
ProgressBarのValueとMaximumにViewModelのプロパティをバインディングさせたら、画面が停止するんですが、UIスレッドを占有しちゃているんですかね?
画面が止まるって事はそういう事なんだろうな
MVVMってよく分からんけど、Vを作るときは対応するVMを作るようだから、
結局VとVMを同じクラスにしちゃってもいいよね?
例えばWindow作るときは、
<Window DataContext="{Binding RelativeSource={x:Static RelativeSource.Self}}" ...>
でOK?
VMとMの結合は強いんだから、それじゃ結局全部Vにならないかw
WPFの使い方としてはむしろそれが普通だがMVVMではない
>>293 > VMとMの結合は強いんだから
ダウト( ´Д`)y━・~~
VとVMよりRxでリフレクションした方がより疎結合だと思うんだけど何故かリフレクション嫌がられるよね
イベント作成なんて一度しか実行されないんだからパフォーマンスの低下なんて気にならないでしょ
VMのコマンドとか手間が半端ないんだけど、これ自動生成をVSが標準搭載しないととても使えたもんじゃないよ
InteliSence無しでコーディングするようなもんでしょ
まじめにMVVMなんてやってないから気づかんかったわ
むしろやってる奴いたんだ
マゾだねえー
LivetでVWのメソッドを直接呼べるよ
>>295 そこを疎結合にするって、実装レベルで説明してるようなの見たことないな。
ただのラッパーじゃねっていうVMしか。
イベントでモデル貰ってVMのメンバにバインドとか、そんな感じのアホなことすんの?
MVVMのサンプルでM->VMを密結合させてるやつなんかねえよw
VM無くしてVのコードビハインド使ったとしても(良くないが)VMがVに密結合したとしても
M->VM|Vの疎結合って一番死守しなきゃいけないところだろ
俺はXAMLにはなるべくなにも書きたくないんだけど
いいよね?
RaisePropertyChanged("変数名");
これの"変数名"って文字列型じゃなくて文字列そのまま渡す方法はないんすかね
C#じゃ引数名はコンパイルすると消してしまうから無理という結論にはなったんですが
Prism?だったら、Expression<Func<T>> を受け取るヤツないか?
Livetでもできるしな
うるせーぞugaya
ちょっと黙れ
>>302 駄目って言ったらやめてくれるんですか??
ぶっちゃけWPFに未来はあるの?
winformsのサポートが亡くならない限り無さそうなんですが
VB6がなくならないのに、どうやってWinFormsから移行させるんだよって話だよね
そんなんでもしぶとく残ってるという見方もできる
WPFの人口少なそう
少なそう、なんじゃない。少ないんだよ。
日本じゃ特に少ないよな
クラサバ系はもう終わりだろう
クラサバで業務系アプリ作るより、Webアプリ作るのが時代の流れだし
HTML5 + JS + ASP.NET MVC >>>>>>>>>>>>>>>>>>>>>>>> Form >>>>>>> WPF >>>>>>>>>>>>>>>> Silverlight
webアプリはクロスプラットフォーム対応が容易って点とインストール不要って部分と
蔵ごとの更新不要って点で、wpf勝ち目ないわ。
IE限定のVBSごりごりなイントラでレガシー炸裂してるのよりも劣る
ウェブアプリとかネイティブアプリの足下にも及ばない妥協の産物なんだがw
FacebookのザッカーバーグもHTML5に期待しすぎたっつってネイティブアプリに方向転換しただろ
iPhoneだってネイティブアプリあるのにわざわざブラウザから利用するやつなんていねーよ。
パフォーマンスもユーザビリティもネイティブには到底かなわない
そうか?
名前を引き合いに出せば粋がれると思ってるやつなんてスルーでOK
おまえら一体なにを開発しててウェブアプリですべておkとか言ってんの?
マジで気になるわ、教えて
逆にwebアプリで無理な業務システムってなに?
やっぱりERPかw
そらウェブで十分だわなw
Webって無駄な通信多すぎなんだよ
抽象論でごまかせば押しきれると思ってる奴なんてスルーでOK
WPFでColorPickerってないの?
ユーザに色選択させたいときってなにをつかえばいい?
何か作ってください
俺は自分で作った。
けど、こだわりがなけりゃWinForms用のを使えばいいでしょ。
今ならWinFormsとWPFを併用しても違和感ないし。
WindowsFormsHostってさじ加減が難しい
WindowsFormsHost使わなくてもダイアログは出せるよ
どうせWPFの標準メッセージボックスもWPFじゃないしな
オウフwww
お前らMVPVMってどうよ
PがVMとMの間にあるとかはイミフだけどナビゲーションをゴニョゴニョするのが別にあるのは良いのかとも思う。
MSDNの記事にあったMVPVMを踏襲する必要は無いと思うがおまいらの意見を伺いたく。
Prismのことじゃねえのと思って読みにいったらホントにPrismの話してて笑った
そんだけ
4層ってのはいいけどMVPVMがいいかといえばよくわからない
メッセージやコマンドをどうすんのか綺麗な答えを出してくれたら
MVPVMにかぎらずそっちに移る
メッセージ→メッセンジャー
メッセージ、コマンド、ナビゲーション含め決定だっていまだにないのかね(´・ω・`)
ナビゲーションとかは別の枠組みであるものだと思っているけど、それがPかっていうと違うと思う。
コレクションの依存関係プロパティってobservablecollectionじゃなくてfreezablecollectionじゃないと駄目なんでしょうか?
Binding="{StringFormat=}"
ここで、小数点なしの0埋めなしで表示させたいです。
D
#.#
両方駄目だったんですが・・・
コンバーターもあるでよ
EventTriggerにCommandを割り当てることはできない?
コンパイルしたexeを別のPCで実行すると、以下のメッセージがでます。
どういうことなのでしょうか?解決方法をおしえてください。
「既に別の要素の論理子です。まず接続を切断してください」
>>342 自作アクションにコマンドをバインドしてアクション側で実行すりゃいんじゃね。
なんか既成のあるかも試練けど。
>>343 そのエラーメッセージでググったん?ヒットしたやつを順番に見てけば見えてくると思うが
直接的な原因は1つじゃないしなんともだ
いくらやってもできなくて半泣きだったら、原因わかりました
文字列型だったからでした
ありがとうございました。
>>339 Mをコレクションにいれてバインディングしているので、VMはコレクションのプロパティはあるんですが、
個々のデータのプロパティ自体は持ってないんですよ・・・・
ズコーッ
>>345 やってみましたが、全然みえませんでした。
画像のせいなのか、プロジェクト参照のせいなのかよくわかりません
>>349 本当に別のPCのみで起きるのか?VSから実行してたりしてない?
開発マシンでexeを実行してみた?正確に原因を切り分けて行かないと
>>349 VS上で動くのは偶然で正常じゃない
すでに他の要素の子になってるのをどこかに突っ込むとそうなる
論理ツリーに入ってるのをどこかに入れたりするとダメ
Storyboard終了時に関数を実行したいんだけどどうすれば実装できますか?
<EasingDoubleKeyFrame KeyTime="0:0:1.0 ・・・
のところに実行するための値があるのでしょうか?
自己解決しました。
Storyboard.Completedでいけました。
355 :
デフォルトの名無しさん:2013/02/20(水) 20:50:24.50
DataGridのヘッダーと一行目を同じデザインにしたいんですが、
デフォルトのヘッダーデザインってどこで設定されているのでしょうか・・・
>>350-352 スタックトレースをみたら、なぜかローカルパスのxamlが記述されていました。
どういう意図でこうなったかはわかりませんが、これのせいだと思われます。
思われますって、それは誰かに投げてるのか、それとも解決なのか
なんかもうシラネェ…
>>356 もう最小構成で試せば?そっから徐々に追加していく感じで。
ビルドオプションとか怪しいと思うけど、WPFの糞仕様が原因っていうのもなきにしもあらず
WPFはmonoで動きますか?
動きません
あんなものサポートする気はないと明言されています
ありがとうございます
WPFという地雷を回避できて助かりました
地雷とかマイクロソフトに失礼だろ、せめて不発弾と呼べよ
せめてFormでDropshadow Effectだけはサポートしてくれんかな〜・・・
WindowsFormsHostはレイヤーウィンドウサポートしてないからどうしようもない
ぶっちゃけ.NET普及の最大の阻害要因は
GUIフレームワークの不出来のせいだと思う
WinFormsは無茶苦茶普及してるでしょ
一から始めたプラットフォームとしてはとんでもない大成功と言っていいレベル
まあ、分野によって使われ具合にかなりムラがあると思うけど、
一番ネックになったのは、やっぱり中間言語形式と実行速度でしょ
俺的には初回起動時のコンパイルだけなんとかなればいいんだけどなー
新しいウィンドウ開くたびにコンパイルされるのが苦痛
よく勘違いされるが初回起動時に時間がかかるのはコンパイルじゃなくてハードディスクからのライブラリの読み込み
SSDで速くなるのがその証拠
マジで?
>>370 サンクス。まあSSDで速くなるなら気にしない。
どうせそのうちみんなSSDになるだろうしね。
>>370 モダンアプリも起動遅いんだよなー。あの遅さはどこからくるのか( ´Д`)y━・~~
ストアの起動が遅いよな
>>372 つーか、機能最小限のアプリのくせして、これまでの.Netアプリと比べて
はるかに遅いように思うんだが
>>374 うむ、なんか.NETより遅いね。
なにが原因なのか知りたいところ( ´Д`)y━・~~
グラボ強化したらどうよ
Modelクラスがあるプロパティを、RaisePropertyChangedで、View(XAML)ではなくて、VMに通知することってできるんでしょうか
そのプロパティは、表示させる場合、かなり分岐が必要ですが、そのロジックはビジネスロジックじゃないので、Modelに書きたくないんです
378 :
377:2013/02/22(金) 13:45:57.64
要は、Modelのあるプロパティが更新されるたびに、ViewModelのあるイベントなりメソッドが呼び出されるようにしたいんです
一番楽なのは、ModelにViewModelの参照を持たせて、プロパティのsetで毎回呼び出すことですが
MVVMイラネって思ってるからフツーどうやるか知らないが、
VMにハンドラ書いて、通知されてきた名前と値でリフレクションでVMのプロパティ取得して、
ブチ込むじゃダメなの?デフォはargsに値持ってないけど
380 :
377:2013/02/22(金) 17:06:31.60
ありがとうございます
それでできそうです
タイトルバーの自作をしたいんですが、SystemCommandの復元と最大化の表示非表示の処理ってどうするのが無難なのでしょうか?
勝手にやってくれるのかと思ったけど、そうでもなかったです
ListViewのAllowDropをtrueにして文字列のドロップだけを受け取ろうとしたのですが
文字列以外のデータのときにDragEnterでEffectsをNoneにしても
アイテムをドラッグしたときのカーソルが禁止マークにならず
ドロップするとDropイベントが発生してしまいます
どうすれば任意の種類のデータ以外のドロップを禁止できますか?
普通にやったらそうはならないから変なことをしてるんだろう
あとは実は本当にドロップされたのに文字列データも含まれてたか
385 :
383:2013/02/23(土) 11:01:33.62
ウィンドウにListViewをおいて
AllowDropをtrueにしてDragEnterとDropイベントのハンドラを追加して
DragEnterでEffectsをNoneにするだけでも再現するんですが
なにか足りてなかったり勘違いしていたりしていますか?
e.Handles=true
wpf DragEnter Effects None でググれ
388 :
383:2013/02/23(土) 14:33:20.34
WPFではPrismやLivetなんかのGUIフレームワークが色々ありますが、
Windows Form向けのはあまり聞かないのは何でですかね?
WinForms向けのもいろいろあるぞ
WPFは一部の奴の声がでかいだけ
391 :
デフォルトの名無しさん:2013/02/26(火) 22:13:10.04
3つプロパティを持つModelクラスをListにいれて、3列からなるDataGridののItemSourceに指定しました。
各列のBindingにプロパティを指定して、列とプロパティが1:1で対応しています。
ただ、このModelクラスのプロパティは、2つは文字列型なんですが、もうひとつは列挙型であり、
その列挙型を文字列に変換するロジックが必要なんですが、
それはビジネスロジックではなくて、プレゼンテーションロジックなので、そのModelクラスには書きたくないです。
で、どこに書けばいいんでしょうか?
DataGridの特定のColumnだけバインディングソースを変えられることは可能なんでしょうか
(具体的にいうと、2列は前述のModelクラスのプロパティで、残り1列はVMクラスのプロパティをバインドしたいんです)
ItemSourceにModelクラスを指定しつつ、バインディングはModelクラスとVMクラスにするってことですが・・・
List型の依存関係プロパティの実装方法って普通のStringの依存関係プロパティとかと異なるのでしょうか?
>>391 IValueConverter書けばいいやん
相談させてください。
<ScrollViewer Name="scroll">
<Image name="img" Source="***"/>
</ScrollViewer>
スクロールビューアに画像を入れてて、画像にエフェクトをかけたいのですが、
img.Effect = 自作エフェクト;
とすると、画像が非常に大きいためスクロールが遅くなってしまいます。
scroll.Effect = 自作エフェクト;
とすると、スクロール自体は遅くならないのですが、バーの部分にまでエフェクトがかかってしまいます。
画像にだけエフェクトをかけるよい方法はありますか?
>>394 <ScrollViewer.Resources>
<Style TargetType="{x:Type ScrollContentPresenter}">
<Setter Property="Effect">
<Setter.Value>
<BlurEffect Radius="9"/>
こんな感じでScrollContentPresenterにエフェクト掛けるとか
>>391 普通はVMでもとのデータから表示用に変換した物にバインドするだろ
397 :
デフォルトの名無しさん:2013/02/26(火) 23:35:35.14
>>393 検討してみます
>>396 Model → ViewModel → View となっていて、
ModelにDataGridの列用のプロパティA・B・Cがあったら、ViewModelにもそれをラップしたのプロパティA・B・Cを作り、
ItemSourceにはViewModel内のList(もしくはObservalCollectionとか)を用意するわけですか?
>>395 ありがとうございます
試してみましたが、画像にかけたときと同じくらいの重さで駄目でした
>>389 なくてもあまり困らないから・・・なき駕する。
WPFでも別に無くても困らないよ
ただWPFの本来の使い方というのは少しWinFormsに比べてフレームワーク色が強く、
そこを理解する前に一部の声のでかい連中によってWPF=MVVMなどという刷り込みがなされてしまっている
つまり本来の使い方とは違う使い方で使おうとしているから変なフレームワークが必要になるってことだ
MVVMは要らない
MVVMが要らないプログラムってのは、まずWinFormsを検討するべき
MVVMが有効で無いってのはお絵描きアプリとかの特殊な物しか無いだろ。
お絵描きアプリにしてもUIとデータ構造がより密接に関係してくるだけで本質的にはMVVMが有効。
それが出来ないのは無能だからだろ
MVVMは大衆に受け入れられないと思う
有効はいいから実践的でおおーっていうソースを示してくれませんかねぇ
見たことがない。これがベストだ!この方法以外にない!っていう説得力があるソース
ソースって記事とかじゃないよ
MVVMにしないでユニットテスタブルにするいい方法あるなら教えてくれ(´・ω・`)
それがMVPでもMVCでもいいけどXAMLならMVVMじゃねーの
XAMLには極力何も書かないのがいい
MVVMだけでなんでもできたら普及するんだがなぁ
winformsでMVVMをやったらいいんじゃない
Behavior、Action、添付ビヘイビア。色々と足りなすぎる。
色々な追加機能があれば十分な機能とユニットテスタブルを両立できるが、
そこに辿り着くまでが長すぎる。辿り着けば有効ではあるが、できるのは1割もいない。
結局はMVVMで作ってマウスぽちぽちユニットテストしている奴が多いw
そんなスゲーなら標準ですべて機能提供しろよアホカ
413 :
デフォルトの名無しさん:2013/02/28(木) 00:20:01.29
MVVMとは離れてしまうかもしれませんが・・・
同期処理で、Windows.showDiaglogで表示した別ウィンドウが閉じられてから処理を動かす方法ってわかりますか?
ShowDialogの次の行に書け
>>414 すいません、それで解決しました・・・
なんかWinformの知識でしたね・・・
>>415 深読みさせてしまいすいません
jqueryみたいなダイアログを出したいんだけど、なんか( ・∀・)イイ!!方法ない?
jQueryにダイアログなんかねえよ
何のプラグインか言え
jqueryみたいなってjQueryUIとか?jQueryとだけ言われてもな
おっとリロードすべきだった
webで表現できてXAMLにできないデザインなんかなさそうだが
jQueryUIでした。
モーダルダイアログっぽいけど、親ウィンドウの操作(移動、最小化とか)は出来る感じです
カスタムコントロール化すればいいだけじゃね
モーダルダイアログを出しておいて、裏の画面の移動とかできるようにするにはどうすればいいのでしょうか?
モーダルダイアログに裏の画面を移動させるボタンをつける
モーダルの意味が解ってないようだねw
というかダイアログを出してる間は裏の処理を止めたいんです
結局おまえは何をやりたいんだと
429 :
デフォルトの名無しさん:2013/03/02(土) 19:44:21.64
>>427 モーダルダイアログに裏の処理を止めるボタンをつける
意味が解らない
Hoge.Pause();
var result=○○.ShowDialog();
Hoge.Start();
違うよ
モーダルダイアログって出してる間は出し元の処理って止まるじゃん
それをモーダルダイアログを出さないで、実装したいんです
質問者すり替わった?
お前はダイアログ出したいのか出したくないのかまずはっきりさせろ
通常のモーダルダイアログは出したくない
jQueryUIのダイアログみたいな感じのダイアログを出したい
jQueryUIのダイアログみたいな感じのダイアログはユーザーコントロールとして作成しましたが、
こいつを出してる間にモーダルダイアログを出している時のように裏の処理を止めたい
こういうことです
そこまではOKだ
次に、裏の処理とは具体的に何か
モーダルダイアログを表示したあとは、そのダイアログが閉じられない限り、ShowDialogの下に処理が流れませんよね
あれを実現したいのです。
ダイアログでいいじゃん(´・ω・`)
モードレスダイアログにしてClosedに
Window.Closed += (s,e)=>{
後処理
};
とか書いとけばええんでない
見た目の問題ならウィンドウの枠消せばいいだけじゃないの
webページみたいにウィンドウ内で疑似的にダイアログっぽいものを表示したいってことか?
あれはウィンドウの要素ツリーを弄って強引に実装する
ウィンドウの最前面にサイズ無限大の半透明Canvasを表示してイベントを妨害し、
その上にダイアログっぽいコントロールを置く
SilverlightのChildWindowはそうやってた
440 :
439:2013/03/02(土) 22:29:58.11
ところでSilverlightのChildWindowは親ウィンドウの構造に依存しないで表示する必要があるから
動的にCanvasを追加したりしてるけど、ダイアログもどきを表示する前提で親ウィンドウも含めて設計するなら
親ウィンドウの最前面にダイアログを表示するためのレイヤを最初から仕込んでおいて
ダイアログを表示するときまで隠しとけばいい
>>438 そうするしかないんですかね
見づらくなるのはしょうがないか
>>439 そんな感じで実装しました
タブで後ろのコントロールにフォーカスが移ってしまうのを制御するのが面倒でした
>>441 フォーカスは親のコンテンツをまとめたパネルのIsEnabledをFalseにするだけでできるでしょ
あ?
よせよ、解決したんなら平和に終わろうぜ
IsEnabled変えたら見た目も変わっちゃうじゃないか
むしろ変えないと不親切だろわかりにくい
ついでにアニメーションで暗くすればかっこいいしもっとわかりやすい
よく理解してないけど
Window.ShowDialog()でいいんじゃないの?
じゃあ喋るな
450 :
デフォルトの名無しさん:2013/03/02(土) 23:57:25.97
VB.NET/XAMLでDictionaryの要素をバインドしようとしてますが、うまくいきません
XAML上では次の様に記述してます
ItemsSource="{Binding バインドしたいDictionary[key文字列]}"
これで実行するとバックグラウンドでBindingが失敗してる旨のメッセージが表示されます
XAMLでDictionaryのValueをバインドするのはこの方法でいいんでしょうか?
その方法でいけますよって書かれてるページ(StackOverflowの投稿)があって、それ見ながらやってみたら出来ないので困ってます
いや、行けません
452 :
450:2013/03/03(日) 00:01:27.26
>>451 いけませんか
正しい記述を教えていただけると助かります
ItemsSource=new binding(ムニャムニャ)
454 :
450:2013/03/03(日) 00:58:28.56
>>453 ありがとうございます、コードビハインドでの方法も試しましたが駄目でした
ItemsSourceに直接ぶちこむならいけるんですけどね・・・
一応コレクションの参照が変わる事は無いのでそれでもいいっちゃいいんですが・・・
解決したいのでもうちょい調べてみます
455 :
450:2013/03/03(日) 01:08:55.22
解決しました
原因はDataContextでした
今回のComboはDataGridColumnHeader内に組み込んだコンボなんですが
ルート要素のDataContextに持たせていたのでスコープは通ると思ってたんですが
DataGridがDataGridColumnHeaderのDataContextを勝手にGridで上書きしていた為
スコープが通らなくなってました
とりあえずComboBoxに直接DataContextを改めてコードビハインドで与えてみると、解決しました
>>453さんのヒントでコードビハインドに目を向けた事で一気に事が進みました
ありがとうございます
ちょっと断片的なんだけど、これを見てくれ
http://pastebin.com/Pc37Gj16 以下のエラーが出る
・CLR 名前空間が定義されていません。'clr-namespace' URI が参照している名前空間 'System.ComponentModel' が見つかりません。
・型 'scm:SortDescription' が見つかりませんでした。アセンブリ参照が失われていないか、また、すべての参照アセンブリがビルドされているかどうかを確認してください。
しかしオブジェクトブラウザやソリューションエクスプローラ見る限り参照されてるし
デザイナの表示にしろ実行時にしろ問題は何もない(ちゃんとソートされたCollectionViewになっている)
でもエラーが消えないのは腹が立つので
どうにかして消せないだろうか
またピンポイントに妙なバグだな
イミフ
名前:デフォルトの名無しさん[sage] 投稿日:2012/10/31(水) 17:13:25.24
C#の自動プロパティはViewとコードの分離のためだし
全部をコードビハインドで書いてる人には価値が分からないだろうな
460 :
デフォルトの名無しさん:2013/03/05(火) 00:23:33.89
いくつかのWindowsで全く似たような機能をもたせる場合(たとえばファイル選択ダイアログとか)、
VMを細切れにして、委譲させたりして、再利用させるのって普通なんですかね?
そういうのはMVVMの外でやる
インターフェイスでIoCやれ
然り然り
わかりました
ありがとうございました。
WPFのPageクラスって複数インスタンス生成するとおかしくなります?
二つのTabItemに一個づつFrame設置して、それぞれに同じPageクラスを表示したいんですが、
最初に生成した方のインスタンスのコントロールの状態がおかしくなります…
むしろ共有してるからおかしいんでは
tabItemにpageをどういう風に入れてる?
コギャル風に
具体的に
すいません。
自己解決しました。
RadioButtonにGroupNameを設定していたのが悪かったようです。
ちなみにwindowのインスタンスを作って
tabitem.content = window.contentみたいにするとエラーになるからな
その場合はwindowをUsercontrolとして作ってcontentにぶち込むといい
この板にMVVMスレあんのな
全く気づかなかった
もともとはこのスレの中でMVVMもやってたけど、別スレ立てたんだよ
ドッキングにavalondockとかいうのを使おうと思うんだけど、使い方分かる人いませんか?
474 :
デフォルトの名無しさん:2013/03/08(金) 16:24:35.64
デバッグ環境だとdebugビルドreleaseビルド問わず例外が拾えないんだけどこんなもん?
単独実行したらOverflowExceptionでててびっくり
コントロールキャッシュってどこに保存されてるの?
自作のタイトルバーをつけるときに最小化ボタンとかの表示をけしたいんですが、どうしたらいいのでしょうか?
右クリックメニューは残したいです
ボタンはwindowのプロパティから普通に消せるよね。
タイトルバー自体を消したいとか・・・?
枠消して、自分でデザインするだけじゃないの?
メニューとかも自分で似せて付けたらいいじゃん
Frame内でPageを2回以上Navigateすると
上の方に戻る進むボタンのあるツールバーのような領域が自動的に表示されてしまうのですが
これを表示しないようにするにはどうすればよいでしょうか
(なるべくXAMLじゃなくてC#の処理でできる方向でお願いします)
Frame.NavigationUIVisibility
ShowsNavigationUI = false
>>480 試したけどそんなことはなかった
win7 vs2010 exp
485 :
デフォルトの名無しさん:2013/03/10(日) 00:55:14.64
visual studioみたいなカーソルを乗せたら表示されたりする横のウィンドウ?を実装したいんですが、なにかおすすめの方法はありませんでしょうか?
ListViewの複数アイテムをドラッグしたいのですが
複数選択中のアイテムの上でマウスボタンを押した瞬間に
選択が切り替わって単独の選択になってしまいます
エクスプローラの選択のように複数選択中はマウスボタンを離すまで
選択状態が変わってほしくないのですが
どのようにすればよいでしょうか
やろうとして俺は諦めた
>>480 GlassFrameTicknessの値を全部0にしてない?
491 :
デフォルトの名無しさん:2013/03/12(火) 17:49:23.80
WPFのソフトってwindows phoneで動かないの?
>>491 まんまは動かん。うまく作ればだいぶ共有可能(´・ω・`)
質問があります。
1
wpf toolkit extendedのwatermarkTextBoxを継承したカスタムコントロール(T1とします)をプロジェクトAで作り、
そのプロジェクトを参照しているプロジェクトBでT1を配置すると、デザイナ上では何も表示されないのですが、デバッグ実行すると表示されます。
デザイナ上でも表示されるようにするにはどうすればいいのでしょうか?
2
自分のPCで作成したexeを他人のPCで一度実行して、その後にそのexeのStyleを編集後コンパイル、
再度他人のPCで新しいexeを実行すると編集したStyleが適用されていませんでした。
適用させるにはどうしたらいいのでしょうか?
もしかしたら、コントロールキャッシュが残っているとか、そういう問題もあるのでしょうか?
よろしくお願いします。
ウィンドウのクライアント領域のサイズを取得する方法はないでしょうか?
WidthとHeightはどうもウィンドウの枠も含んだサイズを返してしまいます。
ContentのActualWidth/ActualHeightでも見れば良いんじゃね
このカメラマンはのってくると、裸になる。
質問です。
Gridに複数のBackgroundがnullなListViewを複数重ねて置いた。
クリック座標に一番手前ListViewのアイテムが無ければひとつ奥のListViewで……
という形で、視覚的に1つのListViewを扱っているようにしたい。
しかし、MouseEventを一番手前ListViewが処理してしまい、
奥のListViewに伝えられないのですがどのようにすれば良いのでしょうか?
StyleのBasedOnにKey無しのStyleを指定することは可能でしょうか?
>>499 あぁごめん、勘違いしてた
GlassFrameThicknessのTopを1以上にしてると表示されてしまうみたいだから0にする
どこかに-1を設定していても表示されてしまう
全部0にすると影を落とさなくなる
GlassFrameThickness="1,0,1,1" とか "0,0,0,1" とかにすれば解決すると思う
ところでMetroライクなUIを手軽に作りたいなら ModernUI for WPF 使うのも手
ttp://mui.codeplex.com/
TextBlockではみ出したテキストを省略するにはTextTrimmingを使えばいいと分かったのですが
省略での・・・を表示したくありません。
良い方法はありませんか?
ClipBoundみたいなプロパティなかったっけ?
>>504 あー。
そんなプロパティが!
ClipToBounds=True と TextTrimming=Noneでいけました。
>>505 Noneだけだと半端な文字が表示されて困ってましたが
504さんのClipToBoundsと組み合わせると実現できました。
アプリケーションリソースで定義しているスタイルの色違いを作る時って
みなさんどうしてますか?
今は色を変えたStyleを新たに作ってます
でも、これじゃ色を増やすときにまた同じStyleが増えていくのが馬鹿らしく思えます。
ImageコントロールにSource = Binding Path=Icon
これでVMに
Public Bitmap Iconのプロパティを作って、値を変えても反映されません。
もちろんPropertyChangedで通知はしています。
これじゃあ駄目なんですか?
509 :
509:2013/03/15(金) 12:45:43.96
BitmapImageじゃないとあかんようです
Bitmap?
ファイルとして存在するならファイルパスを渡せばいんじゃね?
System.Drawing.IconとかSystem.Drawing.Bitmap だとなんかしないと表示できないっぽいけど
512 :
509:2013/03/15(金) 15:42:15.06
絶対ファイルパス渡すと、ビルトしたあとでもファイルがねえよゴルァと怒られるんです
リソースにいれたイメージを、URIで取る方法があればいいんですが
配布するんだろうし絶対パスはありえないだろう…相対でよくね?
リソースにしたいなら、画像のビルドアクションをResourceにして
それをURIで指定できるぞ。別アセンブリにあってもok。
WPFのウィンドウからWinFormsのウィンドウをshow()した場合、
WinFormsのウィンドウはTabキーが効かないみたいなのですが
何か回避策があれば教えてください。
>>514 つ WindowsFormsHost.EnableWindowsFormsInterop
>>513 ありがとうございます
一つ確認ですが、VS C# Express 2010でもバイナリに画像埋め込みできるのでしょうか?
WPFと話がそれましたが
>>518 さぁ…俺はExpressじゃないからなぁ。そんなしょーもない制限ないと思うが。ggrks
画像ファイルのビルドアクションを変更してビルドして試せばいいだけだろ
ありがとうございました
必死にググッてますが、
アセンブリ/Resources/a.pngをURIで取得するには、pack://application:,,,/Resources/a.pngでいいんでしょうか?
聞く前に試せばいいと思うが…
いや1時間ぐらい試したんですが無理でした
結局、Imagesというフォルダをアセンブリ直下にしたらできました
ありがとうございました
聞かれても無いけど誰かの役に立てればと思い備忘録的に書いとく
WindowxXP環境でWPFFolderBrowser.dllを使用してファイルダイアログを開いてファイルを選択した時
カレントディレクトリが選択したファイルのディレクトリに書き換えられてしまう問題が発生した
なので実行前にカレントディレクトリを保存し、実行後に戻す処理をしてやらないと
以後同プロセス実行中、相対パスで実行時参照しているリソースが全部取れなくなる
以上
そんなもんわざわざサードのライブラリを使ってやるくらいならWinFormsのを使うわ
よっぽど単純なソフトでない限りWinFormsはどうせ参照することになる
>>524 おっしゃる通り、ファイル選択ダイアログはコモンダイアログにある
しかしフォルダ選択ダイアログを実装する必要があり
そちらはコモンダイアログに無い為、WPFFolderBrowser.dllを使うはめになった
コモンダイアログとサードのダイアログで見た目が違う事にNGを出されサードで統一したら上記問題に悩まされた
実案件上ではよくある話だと思うので注意して欲しい
誰かドッキングウィンドウ作ってもらえますか?
ネット上になかなか使い勝手が良い物がないです><
相互運用はメッセージと描画の問題が知られてるよね
あとスレッドもWPFは独自の方法で管理してるから、このあたりで問題ありそうだな
ダイアログ出す分には何の問題もない
>>528 使い方がのってるHPとかってありますか?
調べたけど、全然出てこない
APIコードパックにFolderPickerとかいうサンプルなかったか
>>528 指摘されるまでそう考えて気づかなかったがXPだと違う
と言うか普通の業務アプリならWinFormsで充分だよな。
というかHTMLで充分
javaのextにあるアコーディオンパネルみたいなのって無いんですか?
WPF Toolkitにあるけど品質悪いし放置されてるし古いからやめた方がいい
StackPanelにExpander並べたら
>>537 そうなのですか・・・
ちょっと教えてもらった方法で試してみます
Expander使うって事は複数の内1つだけが開いた状態になる様な制御や
開かれたパネルが他子パネルのヘッダを除いた親パネル内の最大領域を取る動きや
閉じた際のリソースの開放とかは自前で作るしかないですよね?
なんかこれとこれ組み合わせるとその辺楽できる、といったようなアイデアはありますか?
>>522 もういいっぽいけど、
pack://application:,,,/アセンブリ;component/Resources/a.png な。
ちょっと遅いけど
>>487 ListViewを継承してOnKeyDownを呼ばないようにして
OnKeyUpに選択処理を書けばいいのでは
選択処理が具体的になんなのかはソース落としてみれば分かると思う
http://referencesource.microsoft.com/netframework.aspx 4.0なら
\RefSrc\Source\.NET 4.5\4.5.50709.0\net\wpf\src\Framework\System\Windows\Controls\ListBox.cs\550320\ListBox.cs
の301行目にある
ListViewのOnKeyDownはListBoxから継承されているだけなのでListBoxの方を見る
4.0と言いつつ4.5だったorz
VS2012もWPFなのか。カッコいいよな見た目は
VisualStudioみたいな横、下に縮むパネルみたいなのって標準でありますか?
ないよ
似たようなのはあるけどあくまで似たようなの
546 :
デフォルトの名無しさん:2013/03/17(日) 17:44:34.31
VS2010からWPFで作っていて、重いぞゴルァと叩かれていた記憶が
2012は2008と遜色ないくらいには軽くなった
どうやったらWPFでここまでできるのか教えてほしい
軽いかどうかは疑問だけど
もし軽くなったならc++で作ったDLL読んでるんだろ
それよりはUIスレッドで動く処理減ったと思う
エディタ部分とかキビキビ動くよね。
あそこら辺はTextBoxのRunとかでごにょごにょやっても余裕でできるもんかね。
ListViewについてなのですが、WinFormsのListViewには
カラムにdisplayIndexというプロパティがあったのですが
WPFのListViewには無いようです。
ググってみたところDataGridにはあるようですが、こちらを
使うしかないでしょうか?
IE10デスクトップ版もWPFなったのか?たまに描画がおかしいときがあるぞ!
IEはDirect2Dだろ
VS本体のフォルダの中にXceed.Wpf.DataGrid.dllの文字が…
やっぱWPFに入ってるDataGridはMS自身から見ても実用に耐えないクォリティなんだな
WPFってDirectXじゃないの?
下位の描画部分はそうっぽいけど、なんなんだろうな。
下位がアンマネージだしマネージと混ざるとなんかあるんだろうか。本末転倒だけど
WPFはSystem.Windows.Media.Drawing系の低レベルな描画プリミティブと
Image関係だけがアンマネージでそれ以上は全部C#だったはず
最近のバージョンだとアンマネージ側ではDirect2Dで実装されてるらしいが
MVVMのVMはユーザーイベントをModelに伝える役目を担いますが「どのModelのどのメソッドを使うか(いわゆるビジネスロジック)」まではVMの役割じゃないんでしょうか?
仮にVMが「ユーザーがこのボタンをクリックしたよ」までの通知しかしない場合、
今度は、そこからビジネスロジックを管理して、最終的な処理を決めるクラスが必要になると思います。
そうなったら、Model + Controller + View + VMで作るのと一緒になりませんか?
突然どうした。ハゲるぞ
ユーザーコントロールの親ウィンドウの取得って簡単にできますか?
一番上のウィンドウが欲しいです
できる。
だが、その方法がリファレンスからすぐに見つかるようになってないのが
WPFの設計の悪いところだな。
どうやるんでしょうか?
GetWindowだとうまく取れなくて・・・
Application.Current.MainWindowではどう?
いやGetWindowで取れないってなんか間違ってるだろ
castしてないだけなんだろ
>>565 取れなかったんですよ・・・
Window ←これが欲しい
UserControl
Tab
TabItem
Grid
DockPanel
UserConrol ←これが使用可
Tabがサードパーティ製だったからなのか・・・
コンストラクタでやってるとか
>>567 取れないってどういう意味?
nullってことか?
GetWindowで取れないってことはその時点では要素ツリーを辿ってもウィンドウが見つからないってことだから
WPF的にマジで親のウィンドウは無い
VisualTreeHelperかLogicalTreeHelperならなんでも辿れるんじゃね
やったことないけど
>>571 それやるとpopup上にあるとwindow取得できないんじゃない?
そりゃコンストラクタの時点じゃまだツリーに登録されてないから取れないだろうな
WinFormsでもコンストラクタでコントロールに触るなと習っただろ…
解決
いやぁ、Winformsだと全部Loadイベントに書いてもいいけど、
WPFでLoadedに書いちゃうと、別タブに行って、戻ってきた時にまた処理が走っちゃうから、全部コンストラクタに書いてるんですよ・・・(;´д`)トホホ…
LoadedよりContentRenderdを使えばいいんじゃね
>>576 二回目以降のLoadedではウィンドウが変わってる可能性もあるんだから
もう一度処理するのが普通なんじゃないか?
今回はTab選択によるLoadedだからウィンドウは変わらないけど、
VisualStudioのドッキングパネルみたいな物の中で使えば変わる可能性は十分にある。
ウィンドウが変わらない時は処理をスキップしたいなら
以前のウィンドウを記憶して処理を分岐すればいい。
つかさぁ、ViewModelにバインドさせときゃいいんじゃねえの
イベントハンドラに頼るからおかしなこと起きるんであって、DataContext経由ならタブ非表示でもGUIデータアクセスできんじゃん
意味不明
コンストラクタでやっちゃいけないんだからVのコンストラクタから呼ばれるVMのコンストラクタでも同じだろ。
だいいちGetWindowsに渡すコントロールをどうやってVMで取得するんだ?
できたとしてもVMでコントロールやウィンドウに直接触るのはMVVMを破ってる。
そもそも、VMでVのライフサイクルイベントを意識する機会はかなり多いよ。MVVMだから楽になるということは別にない。
同じじゃない
バインドされたプロパティの謎仕様により、イベントの問題はかなり回避されるよ
バインドはasp.netでいうPreRenderのタイミングでやってるような気がする。知らんけど
mainwindowで単にthis渡しとけばいいんじゃないのか?
で、VM内でGetWindowでWindow取得してそれでどうすんの? VMでWindow弄るの?
ビューとロジックの分離とはなんだったのか
元々そんなもの幻想ですよ
我々が生きているのは現実です
目の前と向き合いましょう
>>584 GetWindowってもともとそういう仕組みだから同じことをわざわざ自分でやる必要はないよ
ウィンドウに接続された時点でツリー全体にウィンドウが設定される
ユーザーコントロールで配置したコントロールをパブリックにするにはどうしたらいいのでしょうか?
Friendで弄れません的なことを言われてしまいます。
Friendってinternalだよな確か
カプセル化もクソもないゴミ設計だな
x:FieldModifier="Public"
XAMLワケワカメ
Expanderのボタンアイコンって変えることって出来ますか?
ちなみにあれアイコン画像じゃなくPathとかで書いてるみたいですね
合理的ではあるが・・・
Blend使えば一発
いやおそらくIllustratorで描いたやつを変換してると思うぞw
color.xamlのリソースディクショナリで <SolidColorBrush x:Key="testColor" Color="Red" />を定義して、
test.xamlでcolor.xamlで定義した色を使う場合は
Application.xamlで<ResourceDictionary.MergedDictionaries>で上記の2つのxamlを追加すればいいのでしょうか?
それとも、test.xamlでcolor.xamlを<ResourceDictionary.MergedDictionaries>で追加する必要があるのでしょうか?
Application.xamlのリソースにマージするだけでいいけど
普通はそんなのBlend任せ
一度Blend触ると手動でのリソースの管理なんてやってられなくなる
Blendの話はBlendのスレ立ててやればいいのに
いやあBlendは切っても切れないよ。
BlendのないWPFなんて、この現代に石器で家を立てるようなものだ。
でもお高いんでしょう?
普及を阻害してる一因はデザイナ(Blend)をを分けたことにもありそうだよなぁ。
無いといきなりXAMLを見せられるからうわっとなる。意識しないでなんて組めない
まぁあったって意識はしないとだが…
VS 2012 Update2からはBlendはVSの付属ツールになるよ
Expressには付かないんだろうけど
XAML見てうわっとなるとか最初の1日2日だけじゃね?
遠い昔なんで覚えてないけど。
Blend無しでやってられる範囲ならFormsと変わらんどころか
見た目はFormsより貧相だったりするからなあ
作り手の能力次第じゃないの?
まぁFormsより貧相なのしか作れないやつもいるだろうね
能力っていうか手間と時間の問題だろ
センスでしょ
センスなら尚更手書きはキツいでしょ
>>604 今でもなる
深い構造になると意味不明
style関係は特に地獄
対になった</>タグ消すのも一苦労
何かいい方法ってないのかな
自分で見たり編集してる奴なんていないだろ、もはや。
XAMLの手書きなんてHTML+CSSに比べたら屁みたいなもんだろ
HTML+CSSのほうが楽だと思うが
時代錯誤感では伯仲
普通テンプレートエンジンに吐かすかんね
呼んだ?
マークアップ言語をテキストエディタで編集なんてまじハッカー気分だよな。
XAMLはwebと比べると、冗長でカッチリしてるから、webの方が格段に楽だわ。手書きな。
それはあるな
XAMLは見た目と論理構造を分離できないし
というか今まで手書きだったけど、手書き以外ってどうやるの?
いいから Express 2012 for Windows 8 に付いてる Blend for Visual Studio 2012 を触ってみろよ。
次元が違う。WinFormsとWPFの違いとかそんなレベルじゃないくらい違う。
もうすぐ出るVS2012のアップデートで for Desktop にもBlendが付くといいね。
見た目がXAMLで論理構造がDataContextなんじゃないの
623 :
デフォルトの名無しさん:2013/03/22(金) 23:03:50.53
でもそれってWindowsでしか使えなくね?
XAMLの時点でWin専用だ
Qtでも使ってろカス
あるけど開発環境くらい英語でいいだろ…
英語避けててWPFとかありえんわ
だからWPFはありえないという人が多いわけだ。
バカジャップは日本語の書籍やTIPSサイトがないと何もできないからなあ
>>628 そうなると操作性が完全に普通のWPFアプリより劣る
そこそこ有名な会社で組み込みをやってるが
そこですらアプリケーションノートをGoogle翻訳に貼り付けて読んでるバカがいたからね
どうやってこの会社入ったんだろうと心底不思議だった
最初からウィンドウ化出来て欲しかったな・・・
デスクトップでMetroアプリの操作性なんて期待してないだろ
邪魔だし
そういえばマーケットに登録したら100ドルやるとかやらないとか言ってんじゃん
アプリにはバージョンアップが付き物だけど、二回目以降エサがないのに対応するのか?
635 :
デフォルトの名無しさん:2013/03/23(土) 00:07:38.20
そこは人としての問題だな
MyApp, MyApp II, MyApp III, MyApp IV, MyApp V, MyApp VI, ...
全部別アプリにすればおk
今まで何のためにディスプレイを拡大してきたと思ってんだか
あまつさえ2画面目にも手を出しているのに
DOS窓に回帰とか原点回帰かって笑わせてくれるね
最先端(笑)のweb連中によって開発環境もemacsと端末に回帰しつつあるくらいだから大丈夫だよ
(´・ω・`) はいはい、なるほどなるほど。
/ `ヽ. お薬増やしておきますねー
__/ ┃)) __i |
/ ヽ,,⌒)___(,,ノ\
正直、webって苦手なんだよね
なぜWPFは流行らないのか
WPFのお仕事がないからじゃない?
WPFは一部機能しか提供してないから
あとちょっと面倒なことをやり出すとwinforms以上に難しいから
VS本体のアセンブリ見てると、WPFの不可解なくらい複雑な部分もすべてMSが必要としたからそうなってるというのがよくわかるな
長年無茶苦茶複雑なGUIアプリを作ってきたノウハウの塊なんだよ
MVVMとかでチマチマ使うもんじゃなくて自分でたくさんコード書いて枠組み作るための基盤
しらんがな
だったらなぜ標準でVSの様なドッキングコントロールを提供しない?
サードのを買えば済む話だしVS Shellもあるだろ
リストビューのカラムヘッダーのテキストがセンタリングされてしまうのですが
左詰めにできないでしょうか?
出来る
やり方を教えてくださいませ!
>>645 ドッキングコントロールは標準で欲しいよな
無料もろくなのないし
avalondockで良いじゃない
あれ使い方がよくわからないのよね
blendホシス
今まで欲しくなったことがないからイラネ
avalondockはVSのドッキングより低機能だよ
誰か無料で使えるドッキングコントロールの解説してくださいよ
いちいち解説されないとアカンの?
個人の遊びレベルでしかもその程度も自分で探せないような奴のアプリで
ドッキングウィンドウなんて大層なものが必要だとはとても思えないな
実際フリーソフトレベルだとそこそこ複雑なのでもドッキングウィンドウってあんまり無いぞ?
オシャレに感じるから付けたいだけだ
お前の立場で必要かどうかなど知ったことではない
ドッキングなんて独自実装でも1日あれば出来そう
無いほうがマシなレベルならな
自然な挙動にさせようとするとクソ面倒
使ってて気持ちのよいくっ付きをするドッキングウィンドウは職人芸だよ
理論を感覚にあわせるのは大変
WPFだとAdornerとかあのへんの難解なところを駆使するんだろうな
ドッキングはほんといらいらくんね。なんでそこにくっつくんだよって。
Eclipse Junoのドッキングがゴミすぎる
Eclipseでもあのザマなのにとても個人でどうこうできるものではない
出来が悪いとこういうことになる
そもそもドッキングという発想がいけないのだ。
利用者の統計とれば画面構成は3パターンぐらいで収まるもんだ。
多くは自由がないほうがシンプルで便利。
行き着く先がmodernとかいうナンセンスUI
あー統計に埋もれてケース抽出を忘れる典型的な錯誤ですねこれは
デザインのアンチパターンですから真似しないように
ドッキングというかExpanderみたいに勝手に縮むことが大事なんだよ
フロートとかは正直いらない
それだけなら簡単じゃね
ライブラリの使い方覚えてる間に作れる
そういうところは正直
出来合いの物を使いたいよね
あんまりそういうことに神経割きたくないし
だからこそMSがまともな奴を提供すべきだ
このように、ニーズは人/アプリケーションそれぞれなので
WPFのようなものにそういう高レベルな機能を入れても意味がないということだな
>>675 だから提供してるでしょ。VS Shell。
超高度なGUI環境を作り上げた結果、VS環境を丸ごと用意しないと使えないものになってしまったわけだ。
高レベルすぎる機能は潰しが利かないっていうのはまさにそういうこと。
お前は何を言っているんだ
最近よくここで出てるVS Shellってなによ?
コンポーネントパックみたいなもの?
>>679 VSなしでVSのプラグインを動かすための環境
再配布パッケージがあるのでやろうと思えばVSの枠を借りたアプリが作れる
そんなことができるのか
具体的にどうやるの?
インストールするとVS風のプロジェクトテンプレートが選択できるようになるとか?
その前にWPFにまともなイベント機構入れてくれざんす
具体的に何が足りないというのか
コントロールのイベントにataContextのクラスが持ってるメソッドを直で指定できるとか?
VisualStudioって別にそんないろいろなコントロール使ってなくない?
ドッキングウィンドウとツールバーくらいだろ
ILSpyで見てみたらいい
いかに手の届かない世界かがよくわかる
誰かドッキングコントロールぷりーず
まだ言うか貴様ァーッ
まじで頼みますよ
WPF使うスキルに達してませんということ。
WPF Docking Libraryで我慢したら?
ぶっちゃけ微妙だけど、自分で作るよりはいいでしょ
WPFは標準コントロールが貧弱だから、どっかから引っ張ってくるのが基本なんだよ
まぁ、だから普及しないんだけどね
MSも何を考えてるんだか・・・
MSが本気でコントロール作ったらサードパーティ製品が売れなくなっちゃうからね
機能が不満なら自分でカスタムしたら良いですしおすし
本筋から外れた作業をしなきゃいけないのが根本的な不満なんだけど
今時のフレームワークは開発者がロジックに注力できることをアピールしているのがほとんどなのに
本当に時代遅れだなあ
ならWPFではなくてWinformsでしょ!!!
必要なコントロール一つ開発するだげで、
本筋から外れるから不満だってゆとりかよ。
昔は掛け算ルーチンすら自前で書いてたんだぞ。
だからなに
いま石器で家立ててんの?
お前だけいつまでも江戸時代の様式で仕事してればいいよ
このやり取りはエクセル対そろばんで何度も見たので続けなくていいです。
続けなくていいです。
ドッキングコントロールが石器とは。
機能に不満ならそれぐらいサクっと作ろうぜ。
世界最強の.netライブラリ群を擁しながらそれを時代遅れとか、
彼は今までどのフレームワーク、ライブラリで開発していたのか知りたいね。
Javaですかね?
言いたいことは言い終わったか?石のお金ユーザの諸君
7年かけてこのザマが全てを物語ってる
そんな簡単に作れるなら作ってください
お願いします
時給1万出すならいいよ
払うから作れよ
早速工数見積もりしろ
サクッとって言うくらいだから数時間くらいですむだろなwww
さすがの馬鹿ユーザー墓穴
まずRFQ送付してね
送付するから連絡先どうぞ
冗談が通じない奴
既存ライブラリに不満があるのはウザいぐらい伝わったが、
具体的に何が不満なのか全く分からない
だからその不満点もRFQで伝えてやるよ
早くしろ
法人契約が希望なら俺も法人名義でやってやる
業務委託契約書もい書いてやる
法人名出した場合は欠陥品作ったら晒すからな
その覚悟はしとけよ
何キレてんのこの人。キチガイか。
契約前から脅迫してくる新規顧客とかカッコいい
>>710 WPFがいつまでたっても普及しないところ。
結局、誰も作れないんですか・・・
自分で作るのは面倒なんだよなー
○○円でやってやるってレスに食いついてる人は初めて見ましたわ
これだけ利用されてて普及してないとか
ストアもいきなりコケてるしな
メリットもないし
発注させてくださいよ時給1万円で
お願いしてるじゃないですかぁ
次からは時給50万にするわ
ストアはWin8もWPも売れてないからしゃーない。
725 :
デフォルトの名無しさん:2013/03/25(月) 22:03:51.91
WPFは余計なところに時間がかかるから糞だよなあ
だな
お金が有り余ってる人には向いてるのかもね
ガキの喧嘩のほうがスレがはかどるのが、WPFの現状そのもの
つまりガキしかいないと
Gridに配置したDataGridをフルスクリーンで表示したいのですが、親要素から一時的に外して、戻す方法を教えて下さい
おやじはWPFに手を出さないよ。枯れてないもの。
ChildrenからRemoveするだけ
それを別の何かにAdd
終ったらRemove -> Add
>枯れてないもの
そのいつまでも若さを保つ秘訣を教えてもらいたいもんだな
この業界には2つの人種がいるからな
一つは新しい技術に興味を持って身に着けていく奴
もう一つはすでに習得した技術ですべてを賄おうとするヤツ
やれやれ、皮肉が通じないとは
これは恥ずかしい言い訳www
>>733 前者の人種はとっくにwebに行っちゃってるよ
WPFはなんとも中途半端
伸びたと思ったらこれだよ
739 :
デフォルトの名無しさん:2013/03/26(火) 02:09:28.67
枯れた技術をしっかり抑えようと、
まだ習得していない枯れた技術を勉強する第三人種の登場
期待だけが大きかった技術だから仕方がない。
オーバーヘッドが大きすぎて、WPFの上にツールキットを構築するには向かいないし、
機能が充実してて、前準備なしで使えるツールキットでもない。
まさに中途半端という言葉がふさわしい。
XML絡むといつも速度で失敗する。
そんな遅いか?
WPFが遅いのはXMLじゃなくてレイアウトエンジンが糞なせいだから
プロファイラで見てみるとXAMLの読み込みが遅いように見えるが、
XMLだから遅いんじゃなくて、オブジェクトを大量生成しているせいで遅くなってる。
WPFはカスタマイズの幅を広げた代償でGC負荷が酷い。
自前で描画すると速いよ
最近のXML系はパース速度は問題にならないくらいにはなったのか。
実行時に読んでるのはBinaryXAMLだからね。
そもそもパースなんかしてない。
>>745 自前でといっても色々あるけど、具体的に何を使ったら速かったの?
自前ったら自前だよ。
それぐらいサクっと作ろうぜ。
こころにグサっときました。
自前ったらDirectXのSurfaceに直描きに決まってるだろう。
お前らちょっとはゲームプログラマを見習えよ。
ペイントを使って自前で描画してみたら、WPFより速かった
あ〜、DirectXは速いね
WPFがDirectXで実装されてると聞いて、期待してた奴は沢山いるんだろうなぁ・・・
転送するまでGDI+でやってんだから実質意味無い
え?転送前ってGUI+だったの?
milcoreに実装された独自のレンダラかと思ってたけど。
しかしWinFormsに戻ろうとは思わん
756 :
487:2013/03/27(水) 01:11:25.61
>>541 亀ですがありがとうございます
Behaviorで実装しました
silverlightやWinRT(Store App)のXAMLは
WPFと比べてネイティブが処理する部分が大きいので、
自由度は減るが体感的に軽い。
winmdの仕組みは面白そうだけどWPFにも応用できんのかな。
XPで動かすとUIもっさりだったけど、Win8で動かしたらサクサク動くね。
>>757 うーん、Win8のマインスイーパ遅いんだけど。。。
Atom(3300円upg)だから性能不足なんかな。
あの程度ので遅いって時点で、やっぱりXAMLってだめな感じがする。
blend なるものがVSに標準実装されないかぎりWPFなんか使いたくないわ
使わなかったら何?
実行に.NET必要なのがキモい
MSはWin32と.netの置き換えをたくらんでよ。
実質的に.NET入ってないWinなんてもう無いだろ。
win32がないWinが発売されたろ。
質問でうs
xamlでBackgroundProperty編集するとColorsの選択リストが出るような感じで
自分が追加したPropertyで同じ様に任意の選択リストを出せるようにしたいんですが
どうすりゃいいんでしょうか?
開発環境がWindows 8で実行環境がWindows 7なので
ボタン等の見た目が違うので開発に不便です。
Windows 8 上で Windows 7 の見た目で開発する方法はないでしょうか?
PresentationFramework.Aero.dll
>>765 何を出したいか今一分からないがコンボボックスじゃダメなのか?
ItemsSourceに色リストを入れ、DataTemplateでそれを色付き四角にする。
必要ならItemPanelにUniformGridあたりを使い升目上に配置。
デザイナの話じゃね
770 :
766:2013/03/30(土) 09:12:10.55
>>765 2012 Expressだけど、何もしなくても勝手に出たけど。
まさかとは思うが、そもそも列挙型じゃなかったりして・・・
Windows 7 で Button の Background を指定するとボタンがフラットになってしまいます。
回避する方法として、デフォルトのテンプレートを継承してカスタムコントロールを作る方法は思いついたのですが、もっと簡単な方法はないでしょうか?
グラデ付けたいだけなら、LinearGradientBrush を作ってbackgroundに突っ込めばいい。
RadialGradientBrush ってのもあるけど、こっちはまぁナイだろう・・
775 :
773:2013/04/01(月) 19:21:52.44
ありがとう。Background だけ変更するという方法は思いつかなかった。
1
処理中の表示を出そうと思うんだけど、どうするのが理想?
モーダルダイアログを別スレッドで出すのがいいんですかね?
あんたの理想としてまずウィンドウ出したいの?出したくないの?
あんまり出したくないです・・・
ダイアログを別スレッドにするんじゃなくて、処理が別スレッドの方が理想。
「処理中ですが別の作業をすることはできます」って出るとなお良い。
出したくないなら出さなくていいだろ
処理中だって分かればいいんだから
ウィンドウが出ないと処理中だって分からないわけじゃあるまい
ただ、
>>777がどういうワークエリアを持ったプログラムを作成しているか知らんので
当たり障りの無い答えだとウィンドウ表示しとけになる
全然理想だとは思わないけどね
その程度の情報ならそんな回答が関の山
別スレッドはやめて、処理の最初で処理中の表示をして、その後に画面をリフレッシュさせれば、別スレッドでなくてもメイン処理が走っている間は処理中の表示が出るようにしたら?
強制的に画面をリフレッシュすることができるかわからんが
裏でプロセスが動いてる時に勝手にLoading...みたいな画像がでるように設定できたらいいのにな
カーソルが砂時計のときに出すってすれば簡単にできると思うのに
そういえばデフォルトの待機カーソルが砂時計じゃなくなったのいつだろ
裏でプロセスが動いてない時≒電源落としてる時
VistaのAeroテーマからかな。
ワーカーサービスとか作ってThread.IsAliveやTask.Status==Runningを公開すればいいだけのような気も
あとはトリガ貼れるでしょ
こういうありきたりな機能を標準装備してないとか終わってるな
gifアニメを表示できないのも残念
WPFを勝手に始まっていたかのように言わないでくれますか
7年間一度たりとも始まったことなんてないよ!
オワコン
792 :
デフォルトの名無しさん:2013/04/06(土) 04:10:09.02
最近のMSは変な政治力学が働いてるよな。
人気のあるものは捨て、人気のないものは開発を続ける。
ゲイツなら椅子ゆらして絶対キレるパターン。
MSのオワコン臭が半端ないからWPFを心配しなくて大丈夫
人気より未来を取ったんだろ
正直Webは終わるよ
何が来るか教えてplz
webだよ普通に
MSが一番力入れてるのも実際webだしAzureとか伸びまくってるし
流行ってるものを終わってると発言して先を行く自分を演出する層が一定数いる、ということ
別スレッドから元のスレッドのUIを弄りたいんだけど、どうすりゃいいの?
そのUIのDispatcher使う
800 :
片山祐輔:2013/04/07(日) 11:11:57.22
別PCからハシシタの使ってるスマホアプリのスレッドのUIを弄りたいんだけど、どうすりゃいいの?
死ね
Update2を入れたけど、相変わらずblendの品質は悪いな。
VisualStudioで作ったソリューションファイルをちゃんと読み込めないケースが結構ある。
そうか・・・あまり期待できんね
Blendは正規サポートからそのうちはずれそうだなあ
WPFでデフォでRibbon UI使えるということでwktkしながらMSDNからコピペしてた
しかしなんだ,Win7だからなのか知らんがウィンドウの枠が非常に小さくなっちゃって
折角タイトルバーとツールバー統合しても上のほうが削れちゃって
何とかならないのでつかコレは
2007バージョンを使えば?
片手落ち
>>799 具体的にどういうことでしょうか?
Private Sub Button_Click(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs)
Dim tsk As New Tasks.Task(AddressOf Disable)
tsk.Start()
Waiting(3000)
Enable()
End Sub
Private Sub Waiting(ByVal ms As Integer)
Thread.Sleep(ms)
End Sub
Private Sub Disable()
Me.IsEnabled = False
End Sub
Private Sub Enable()
Me.IsEnabled = True
End Sub
どう修正したらいいでしょうか?
Subって文字見るだけで吐き気もよおすんですがどうしたらいいでしょうか
vbもC#も目糞鼻糞だから・・
>>811 すいません、どういう風にしたらいいのでしょうか?
813 :
811:2013/04/08(月) 00:37:09.12
死ねば?
VBでラムダやデリゲートをどう書くか知らないから説明できない
C#ならmyWindow.Dispatcher.BeginInvoke(()=>myWindow.Title="wwwwwwwwwwwwwwwwww");などと書くわ
デリゲートなんてそう使うことないし、全然覚えてないわ
てか、VBにこだわらず、C#覚えなよ
WPF系で、検索かけて海外サイトとかでサンプルコードとか見つかっても
ほとんどVBじゃなくてC#で書かれてるよ
>>805 リボンに限らず、標準のコントロールのデザインが微妙に崩れてるんだよね
細かいところにこだわるなら、自分で修正しないと使えない
>>818 ありがと
ここはファッキンマイクロソフトってことで我慢する
threading.threadじゃなくてtaskが流行ってるの?
そりゃ一番高機能で簡単に使えるからな
流行ってるってか使い分けが必要なもんだ
・ 次のような場合は、スレッド プールのスレッドを使用する代わりに独自のスレッドを作成して管理する方が適切です。
フォアグラウンド スレッドが必要な場合。
スレッドに特定の優先順位を設定する必要がある場合。
スレッドを長時間にわたってブロックするタスクがある場合。 スレッド プールにはスレッドの最大数が存在するため、多数のスレッド プール スレッドがブロックされると、タスクを開始できなくなることがあります。
スレッドをシングルスレッド アパートメントに配置する必要がある場合。 ThreadPool スレッドはすべてマルチスレッド アパートメントにあります。
スレッドに関連付けられた、確立された ID が必要な場合、またはスレッドを特定のタスク専用にする必要がある場合。
無論、上記当てはまらないならTask使うべき
てか使え
.NET2.0-3.5 SL2-4
BackgroundWorker、非同期デリゲート、ThreadPool.QueueUserWorkItem
.NET3.5/SL4 Rx
.NET4.0/SL5 Tasks
.NET4.5 Tasks + async/await
TasksはTPLやParallel Linqのベースにもなって汎用性高い。
Rxは外部ライブラリなので、使うかどうかは好き好き。
>>808 VBでラムダは書きたくないのう・・・
IsEnabled = False
Task.Factory.StartNew(
Sub()
Thread.Sleep(3000)
End Sub).
ContinueWith(
Sub()
IsEnabled = True
End Sub,
TaskScheduler.FromCurrentSynchronizationContext)
VB11の場合もう少し短くなるか
Async Function Ademo() As Task
IsEnabled = False
Await Task.Run(
Sub()
Thread.Sleep(3000)
End Sub)
IsEnabled = True
End Function
VBキモイ
C#だって充分キモイだろ
目糞鼻糞なんだよw
()=> とか十分ヘンだなw VBは全部単語で明示するのがコンセプトなんだろうな
VB使ってるとC#のコンストラクタとか全然わからんわ
なんでや?VBもC#も、コンストラクタの基本的な仕組みは変わらんだろ
C++の気分でデストラクタ書いたらバグるけどな。
そんなことしねーよ
とも言い切れないか
C#は他の言語から移った奴多そうだし
834 :
デフォルトの名無しさん:2013/04/13(土) 06:26:26.68
NETの時代が来て、VBとC#は少なくともコードのロジックを表現する限り、
簡単に相互変換できるようになった。
昔のベーシックは論理演算子がなかったので、
ビット演算子のAnd とOrを使って条件分岐の処理を記述していた。
こんな低級言語は消えてよかった。
VBは程度の低い言語だが間違っても低級言語ではない
建て増しを繰り返した巨大温泉旅館みたいなものだ
いつから言語仕様のスレになったんだ?
スレ違いだから余所でやれよ
>>834 MSX-BASICやN88BASICに論理演算あったけど?
WPFの仕事を積極的にしてるとこってある?
Webは面倒だし、業務系はwinformばっかりだし
業務上、WPFを選択するところは技術力のないところだからブラックを避けるために
言ってるのかもしれんが、ITは全部ブラックだよ。
ブラックで技術力無い=規模が小さい で先の見えないwpfを選択するかねぇw
導入コストに見合うリターンがあるかどうか
>>839 いっぱいやってるよ、WPF。
指定がなければWPFが第一候補だよ。
2年目くらいの若手でも十分作れるし。
いっぱいやってるのに、情報少なすぎじゃないか?
いっぱいやってるというのは嘘なんだから当たり前じゃん。
845 :
842:2013/04/14(日) 20:28:51.11
WPF側の情報が必要な難しいことはやってないしなぁ。
単にフォアグランドで全画面表示するプログラムの画面部分に
使ってるにすぎないし。
アニメーションgifを表示する方法ってないの?
画像表示用のImageが超貧弱で1つしかフレームをサポートしないので
BitmapDecoderで自分でフレーム管理してImage.Sourceを差し替えるか
MediaElement使うとかFormsのPictureBox(笑)を使う
俺の感覚だとひとつの国家を維持運営するような人間の知性の集合って、俺らが尊敬する個人とかよりももっと巨大なものだ思うのが自然だと思うんだけどなんでみんなそんな北朝鮮馬鹿にしたいのかな。
尾上、朝鮮人\(^o^)/
こういう一歩引いた俺を演出する精神性も好きじゃねえわ
似たようなもんだろ
無料の Microsoft Expression Web 4 使ってみた。いいね!
たいしたことするわけでもないのに .net のでっかい開発環境はいらないんだよね。
古い開発環境はあるけど XML とか対応してない。
PowerShell でちょっと WPF をやりたいだけなんだよね。
これ最高。いや、他の知らないけど。
同じ書式でHTMLとしても保存できるけど、hta としても動くんだろうか。
メモ:
WPF Windows Presentation Foundation (WPF) はマイクロソフトが開発した、
.NET Framework 3.0以降に含まれるユーザインタフェースサブシステムである。
WPKは、WPF PowerShell Kit
リリース時期 PSバージョン 対応 .net バージョン
2006年11月 PowerShell 1.0 = .NET Framework 2.0
2009年10月 PowerShell 2.0 = .Net Framework 2.0 Windows 7 で標準搭載
2012年 9月 PowerShell 3.0 = .Net Framework 4.0 Windows 8 で標準搭載
A .NET Framework 1.0
B .NET Framework 1.1
C .NET Framework 2.0 < 3.0 < 3.5
D .NET Framework 4.0 or 4.5
A,B,C,D はそれぞれ独立
< は包括 下位互換
or は同時使用不可 で ほぼ下位互換
OS 付属.net 使用可能バージョン
W2k なし 1.0 〜 2.0
XP 1.0(MCE) 1.0 〜 4.0
2k3 1.1 1.0 〜 4.0
2k3R2 2.0 1.0 〜 4.0
Vista 3.0 1.1 〜 4.5
W 7 3.5 2.0 〜 4.5
W 8 3.5, 4.5 2.0 〜 4.5
ttp://www.atmarkit.co.jp/ait/articles/1211/16/news093.html
メモじゃねえよカス
てめえの汚い面に掘り込んでろ
でかいツールはいらないって
ExpressionってほぼVSと同じものだぞw
Expressなら大して変わらんだろ
おっと
比較対象がなかったね。
Microsoft Expression Web 4 114MB
PowerGUI 13MB PowerShell エディタ
皮肉のつもりか?
それ各エディション全部入りのDVDイメージだよ
>>858 VS2012入れてるんだけど3GB なんだよ
何を入れたか忘れたけどExperssだよ。
・・・あ、試用版だったかも
入れた理由を聞いてくれ。
俺はただRADツールっぽいものが欲しかっただけなんだ。
確かにリッチな開発環境だから不足するはずはない。
しかし、俺が欲しいものではなかった。
ちょっと使ってみたかっただけなんだけど
ISOでダウンロードできなかったから小さいセットアップを実行した。
ダウンロードしながらインストールが進むが、インストールが完了するまで確か4時間ほどかかった。
ダウンロードだけならDVD1本で30分の環境なんだが。
・・・どうでもいい話だった。すまない。
VirtualizingStackPanel周り弄っても
ListViewの描画がスクロール毎に重過ぎる
VirtualizingStackPanel使うとItemContainerGeneratorがまともに動かないのもウザイ
すぐnull返しやがる
PowerShellもweb4もよくしらないけど、
エラー出てるタグ見る限りHTMLだし、でもXMLだと言ってるからXHTMLなんだろうけど、
XHTMLとXAMLは全然別物だぞ。どっちもXMLではあるけど。
XAML書くならVSかBlend使わんと。
>>863-864 なるほどそうでしたか。
Microsoft Expression Blend? 2 試用版 289.6 MB
Microsoft Expression Studio 4 Ultimate 試用版 351.4 MB
Blend + SketchFlow Preview for Microsoft Visual Studio 2012 Blend_Preview_VS2012_en.exe 102.3 MB
Expression Blend は・・・確かにでかいな。
for VS2012 は VS2012 が入ってること前提だし。
それでも入れるか他のエディタ探すかだけどリッチなエディタはこれよりでかそうだし
とりあえずHTAとして開くか。
スレチな話題ですいません。
Metroいじったけど
WPFといろんなところが違うんだね
イベントの仕組みまで変えてくるとは思わなかった
BCLからして違うから
クーガー
スカイセンサー
FRG-7
SSR-1
869 :
デフォルトの名無しさん:2013/04/19(金) 15:12:30.60
MediaElementのmp4フリーズ問題に引っかかって苦戦してるんですが
RenderModeを変えるためのコードの途中で
HwndSource hwndSource = System.Windows.PresentationSource.FromVisual( mediaElement ) as HwndSource;
これが初回はnullが返ってきてしまうので初回はフリーズを防げません。
WinFormのControl.CreateHandleとかCreateControlみたいなことが必要なんじゃないかと
予想してるんですがどうしたらいいんでしょうか……
私って〜な人じゃないですかぁ?
871 :
869:2013/04/19(金) 18:21:16.88
WinRT 版に Windows.UI.Xaml.Controls.WebView とか、HTML ブラウザをホストする機能があっても、
Android の WebView と違ってユーザエージェント変更したりとか、おおざっぱな設定すらできないのがなー。
なんかもうちょっと、手軽に HTML ブラウザをホストできて、細かい設定を行う上手い方法ないかしらねぇ
WPFならWebkitでもIEのActiveXコンポでも何でも載せれば済む話なのでどうでもいい
WinRTは別物なのでスレ違い
test
875 :
デフォルトの名無しさん:2013/04/22(月) 16:41:51.11
System.Runtime.InteropServices.COMException (0x88980003): HRESULT からの例外: 0x88980003
場所 System.Windows.Media.Imaging.RenderTargetBitmap.FinalizeCreation()
場所 System.Windows.Media.Imaging.RenderTargetBitmap..ctor(Int32 pixelWidth, Int32 pixelHeight, Double dpiX, Double dpiY, PixelFormat pixelFormat)
しばらく動かしているとたまにでるんだけど、これってどんなときに起きるのさ...もう原因不明orz
RenderTargetBitmapて解放とかないよね?GC任せで問題ある?
そんなエラーでないからわからないな
関係ないかもしれんがBitmapはDispose()しないとダメだよ。
なんでWPFとSilverlightとWindowsPhoneのクラス名というか名前空間を同じ名前にしてるの?
検索しづらくてたまらないんだが
しかも同名で微妙に機能が違ったりメンバーがあったりなかったり
本当に馬鹿だろMicrosoft...
愚痴りたいだけで自分でなんかする気はさらさらねーでゲス
行動力皆無、常に他人任せ、女の腐ったような愚痴体質、不平不満は人一倍
こんな僕なので、客観的なフィードバックはとても無理
僕の精神安定に必要なのは、とにかく話を聞いてくれるコールセンター
君らがその役目だ
ボタン二度押し防止したいんだけど、どうしてる?
タブコントロールで選択中のタブを変えた時に横にスライドするようなアニメーションを実装したいんですが、可能でしょうか?
>>884 処理が終わるまでボタンをdisableにしとくとかそんな話?
2回目押したらディスクがフォーマットされる仕組みにしとけ
脳の仕組みがWindows95時代から変わってないのな
wpfでタッチアプリを開発したいんだが、タッチパッドとかそういうのは持っていない
MultiTouchVistaというものを使えばエミュレートできる書いてあったんだが、Windows8ではマウスをクリックしても何も起きなかった
MultiTouchVista以外でタッチ操作をエミュレートできる奴があったら教えてほしい
metro用のシミュレータ―が使えるんじゃないの?
RIBBBBOOOOOOOOOOOONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
ツナがいるな…
>>890 VisualStudioから起動する奴のことか?
あれだが、WPFだとデバックボタンにシミュレートが表示されないから使えなかった
DotNetTextStoreのアセンブリは結構便利そうなので、公開したいと思う
そのまま公開しちゃっていいんだろうか
別々に表示したい情報を同じユーザコントロールクラスを使って複数表示する場合とかだと、
ViewModelLocator使うのは向いてないのかな
コンボボックスのItemソースにDataTableを設定して、SelectedItemにDataRowViewを設定したのですが、SelectedItemに選択したItemが反映されません。おすすめの方法はありませんでしょうか?
.net4.0でぼかしってどうやればいいんでしょう?
BlurEffect
RibbonWindow最大化すると画面から数ドットはみ出すのって何なの?
それなんでだろうね。気になる。
>>899 StackOverFlowにそんな感じのあったぞ
subsystemを5.1にしてホストプロセス切ればなんとかなるとかなんとか
それ逆に上が1ドット空くんだが、
調整するにしろ環境依存になりそうだ
この意味不明な仕様がMSの真骨頂
つーか普通にRibbon Framework使えよ捗るぞ
906 :
デフォルトの名無しさん:2013/05/13(月) 10:34:22.04
□□□-□□□-□□□
□□□ = TextBox
- = Label
というデザインにしたいんです
OrientationがHorizonalなStackPanelに要素をいれましたが、長さを指定する方法がわかりません
Label のMaxWidthを20にして、あとは3つのTextBoxで均等に埋め合うようにしたいんですが、どうやるのでしょうか
Width=*はエラーになりました
よくわからんけど、画面サイズが変わっても相対的なコントロールのサイズの比率が
変わらんように配置したいなら、フツーはGrid でスターサイズで指定するんじゃね?
中のコントロールはGridの枠線にドッキング?しとけば勝手にリサイズされる。
意図がこうじゃないなら、絶対サイズでstackpanelに普通に入れればいい話だし。
908 :
907:2013/05/13(月) 13:18:33.33
ありがとうございます
一行だけのGridを作らないと、autoや*は使えないんですね
WPFの空域問題って4.5 betaで出たきりで、結局解決してないよね?
何か良い解決策ないんだろうか。。。
解決策見つけたわ。
100円で教えて!
コマンドのCanExecute系の式が評価されて、コントローラーがEnableかどうか切り替わるタイミングっていつなんでしょうか?
今でしょ!
CanExecuteChangedが呼ばれたとき
というかCanExecuteいらね
IsEnabledにプロパティをバインドでいいよ
ICommandにIsEnabled持たせればいいだろ
Command自体野暮すぎて全然使ってないずら
ガハハ
>>914 確かにIsEnabledのほうがいいかもしれませんが・・・
たとえば、多少長い処理(DB接続とか)をやるとき
ボタンを押下したら処理が終わるまで再押下できないとしたら、
private void CommandExecute()
{
ボタン.IsEnabled = false
// 処理
}
ってやるのが普通なのでしょうか?
>>915 どうやるんですか?
イベントハンドラに処理書いてるなら普通にそれでいいし
MVVMならVMに専用のプロパティを持たせてバインドするだけ
>>914 まぁ理論的にはその2つは別物だからわけてるんだろう。
実際には同じ場合がほとんどだろうけど。
>>918 MVVMでやっているんです。
できればMVVMなりのやり方でしたいんですが
<Button IsEnabled = "{Binding IsEnabled}" />
となっているとして、やはりMVVMでも、コマンドなりにこのIsEnabledを押下直後にfalseにされるんでしょうか?
>>919 参考にします
ありがとうございます
必ずまとめて複数のコマンドを無効にしたくなる状況があるから
MVVMだと結局VMのプロパティにすることになる罠
柔軟なように見せかけてるだけで全然柔軟じゃねえよな
MVVMだと特定のコマンド一つだけを無効にする方が珍しいくらいだろ
多くの場合複数まとめてON/OFFするから、コマンド一つずつCanExecuteを設定してるとミスの元になるのでやめた方がいい
926 :
デフォルトの名無しさん:2013/05/15(水) 16:13:13.33
WPF初心者なんですが、Nameプロパティだけだけ違ってあとは同じコントロールを大量に作るとき、一つ一つにプロパティを設定するのではなくて効率いい方法はありますか?
コピペ
>>922 俺はWPFに興味がある程度の人間だけど
匿名ツールを使う人間なら仮想マシンを使うのが当たり前なので
マシン情報から特定はよっぽどの間抜けじゃない限りありえないと思う。
警察が操っていると言うより、
警察とマスコミの共通の親分である在日朝鮮人の指令で動いてるだけだろ。
これ以上話を続けるなら適切なスレに誘導よろしく。
つか、WPFってName無くても大丈夫だから、Name取ってしまいなよ。
コード側で配列宣言してnewすりゃええんじゃないの
ExcelでもVisual Studioでも好きなの使ってXAML生成すればええやん
いやDataTemplate使えよ
>>934 初心者には無理。
半年ぐらい実戦経験積ませてから教えるぐらいがちょうど良い。
1000レスに半年掛かってた2スレ前に比べるとだいぶ速くなったな
>>922 警察だってスキルのある技術者を雇っているはず。
痕跡にはこんなスレで駄弁ってる奴らが思いつかない根拠を見つけているさ。
釣果3匹
>>928 本日、検察側から弁護側に証明予定事実と裁判官への取調べ請求証拠が
開示されました。
ここ一週間の間に佐藤弁護士による大攻勢が始まるでしょう。
wktkですね。
疑問を持つことと被害妄想の区別がつかない奴って笑えるねw
>>941 誰の誰への被害妄想?
被害にあっているのは誤認逮捕者だけだろ?
あー草い草い
画面上に文字を表示する「だけ」で、フォーカスも取らないしマウスクリック透過するウィンドウを作りたいのですが、
新しいWPFアプリプロジェクトにTextBox作って、Windowに
Focusable=disable WindowStyle=none AllowsTransparency=enable
Background A=0 TopMost=enable IsHitTestVisible=disable ShowTaskbar=disable
設定して、あとTextBoxにもIsHitTestVisible=disableしたところ、表示は良い感じですが、
文字部分をクリックすると、どういうわけかフォーカスを取ってしまいます。
あと設定が足りないプロパティは何でしょうか?
なぜTextBox
すいません、TextBoxじゃなくてTextBlockの書き間違い。恥ずかしい……
Windowなんか作らずに、文字だけ表示すれば良いんじゃない?
そんなことができるのか?
どうやって?
949 :
デフォルトの名無しさん:2013/05/21(火) 10:27:37.67
Metroアプリのシミュレーター経由でD3DImageを使用しているソフトを実行してみたら、
見事に何も表示されなかった
高い金出してタッチ対応ディスプレイを買うしかないというのかorz
そもそも何でストアアプリでD3DImageが動くと思ったのか…
タッチ対応ディスプレイとか関係無くね?
そもそも何でストアアプリでD3DImageが動ないと思ったのか・・・
実機でも動かないなんて誰も言ってないのにね
952 :
デフォルトの名無しさん:2013/05/22(水) 06:38:40.56
>>950 Microsoft.Windows.Simulator.exeだけを起動するとデスクトップアプリでもタッチのシミュレーションができる
だから、シミュレーターで動かす場合はストアアプリでなくてもいける
>>952 そういう使い方もできたのね…
知りませんでしたわ、サーセン
この数年MSが発表したもので将来性ありそうなものが無いな
Azureは大勝利してるだろ
後発でGoogle抜いて業界2位になったらしいぞ
もうXAML転用できるのASP.NET MVCだけだな
ASP.NET MVCもだな >最近の成功例
今4回だわ・・・
WPFってもう進歩ないんかね
メトロみたいなゴミのせいで
交互の法則大炸裂中ですのでWin9までお待ちください
メトロが大成功したとして、GUIはHTML5推奨だろうな
次のVSではもうXAMLはレガシー扱いでクライアントC#+HTML5アプリの開発に対応すると思う
既にストアアプリって死に体じゃね
肝心のWindowsRTが1年後があるかも怪しい
ストアアプリスレが酷い有り様
金で開発者を釣るって話はどうなったの
キャッチアンドリリース
966 :
デフォルトの名無しさん:2013/05/23(木) 04:43:52.43
鳥居みゆき思い出したw
>>961 TypeScriptとかならわかるが、C#はないだろうなぁ
Window内のどこを左クリックしてもドラッグできるようにしたいのですが、
現状、コントロールを配置してマウスオーバすると色が変わり、
左クリックでドラッグできません。
WindowのLoad時に
this.MouseLeftButtonDown += delegate { DragMove(); };
しています。
コントロールにも設定してみたのですが効果がありませんでした。
コントロールはLabel、TextBlock、ContentControlと試してみました。
そもそもLabelコントロールですらマウスオーバで色が変わるので
これも困っています。だまってContentを書いてくれるだけでいいのに。
うるせーよクソが
970 :
968:2013/05/23(木) 21:18:48.55
解決しました。
えらく速いな。
有能だね
うるせーよクソが
Win8でソフトウェアキーボードみたく
モダンUIやデスクトップに関係なく画面に割り込む形で表示させたいんだけど
何かうまい方法ありませんか
モダンUIという名前が出るたびにナウなヤングにバカウケを思い出して嫌な気分になる
5年もすればLegacyUIなのにModernとかいう意味不明な
間の抜けた名称だとは思うが、ナウなヤング云々は2ch脳の被害妄想っぽいようにしか聞こえんな。
モボモガなら分からんでもないがw
>>974 自分でボタンをいっぱい乗せたフォームを作って、開けば良いよ。
>>977 お前はモダンUIの酷さを知らないようだな
モダンなだけじゃないのか?
お前だけ現代的UIって呼べよ
どう呼んでも酷いかどうかはわからんな。
web2.0 的なものになりそうだな。結局何だったの…?みたいなw
焼きそばが入ってるんだろ?
現代的UI(だったらいいな)
きっとヒュンダイって読むんだな。
つか、MS IMEって「ひゅんだい」って入力すると「現代」って変換するのね。。。
「ひょんで」でも同じように変換する
こっちの方が原語の発音に近いね
>>986 あそこは今は英語表記が正式な社名だったような
「現代」の朝鮮語の読みではなくて
アルファベットへの変換はWindowsすら登録されてないし
英語読みはホンデイに近いよね。
綴りと読みが合っていないような気がするけど、
とある日本の自動車メーカに似せたかったらしい。
>>989 さすがにそのネトウヨの被害妄想を真に受けるのは馬鹿っぽい。
もう立派な2ch脳だな。
車ってどこの国の人にとっても安い買い物じゃないんだけど。
>>989 トップ・ギアでは「ハイアンダィ」って発音してたな
WPFアプリとかWinFormsアプリケーションをタッチパネルで操作できるの?
そのOSでタッチパネルがサポートされていれば
アプリからはタッチ操作はマウス操作と同じ
なるほろ
納得していいのかw