WPF(XAML, XBAP, .Net3.5)GUIプログラミング Part5at TECH
WPF(XAML, XBAP, .Net3.5)GUIプログラミング Part5 - 暇つぶし2ch829:デフォルトの名無しさん
10/05/04 15:31:17
カスタムコントロールにResourceDictionaryを定義した
xamlファイルを結びつけるのはどうすればいい?
カスタムコントロールのコードからリソース内の表示用部品を利用したいのだけれど。

830:デフォルトの名無しさん
10/05/04 17:01:51
>>829
xaml の読み込み
ResourceDictionary.MergedDictionaries
or
XamlReader.Load(file)

部品の取得
FrameworkElement.FindResource(key)
or
ResourceDictionary[key]

831:デフォルトの名無しさん
10/05/04 18:34:43
>>829
これでも
ResourceDictionary rd = new ResourceDictionary();
rd.Source = new Uri("pack://application:,,,/MyApp;component/Dictionary1.xaml", UriKind.Absolute);
string myValue = rd["MyValue"] as string;

832:デフォルトの名無しさん
10/05/04 18:44:44
>>830-831
さんくす!
使うリソースは1つだけなので
this.Resources.Source = new Uri("pack://application:,,,/testcontrol/test.xaml");
でいけた。this.Content = this.FindResource("button");てな感じで使えるね。

これでようやくコントロールの表示部分に取り掛かれるわ

833:デフォルトの名無しさん
10/05/04 19:03:40
日本のメーカーPCはグラボ非搭載が主流だからWPFはきついな

834:デフォルトの名無しさん
10/05/04 19:28:07
誰一人つられないんだからね

835:デフォルトの名無しさん
10/05/05 00:38:09
現在主流のCore-iモデルの内蔵はintel HD Graphicsで
そのコンパネがWPFだったりするんだけどな

836:デフォルトの名無しさん
10/05/05 01:34:12
WPFってなんだろう

837:デフォルトの名無しさん
10/05/05 01:44:00
人生・・・かな?

838:デフォルトの名無しさん
10/05/05 03:17:03
鉄板麺!!

839:デフォルトの名無しさん
10/05/05 16:50:17
WPFはAdobeのあれをパクったような感じ

840:デフォルトの名無しさん
10/05/06 08:43:05
国連になんかあったな

841:デフォルトの名無しさん
10/05/06 23:49:46
Window の中に Grid が1つあり、
その中に同じ大きさの Viewbox を3つ配置しています。
3つのViewboxの位置は同じで、重なって配置されます。

それぞれのViewboxにはGridを配置し、その中には
・透過色を指定したPNG画像と
・Rectangleを1つずつ配置しています。
3枚の画像は同じ大きさで、UniformToFill にしています。
Rectangleは、各画像の背景色の領域中に配置するようにしています。
また、Rectangleはクリックされると Fill が変わるようにしています。

このとき、一番階層が高い Viewbox 内のRectangleしかクリックに反応してくれません。
2番目、3番目のViewbox内のRectangleも反応させるにはどうしたら良いのでしょうか?

ソースを以下にUPしましたので、よろしくお願いいたします。
URLリンク(www.dotup.org)
pass: wpf

842:デフォルトの名無しさん
10/05/07 00:02:32
現象が発生する最小のプログラムでないと誰も見ないぞ
単純に一番目にRect三つ配置すればいいんじゃねーの

843:デフォルトの名無しさん
10/05/07 00:05:50
>>841
Grid.Row, Grid.Column を分けずに、一つのセル(?)でやってるから、最後の Viewbox がイベントとっちゃって、その兄弟にはイベントが伝播しない。
素直に Canvas 使うか、Grid.Row を3つに分けなさい。

844:841
10/05/07 00:12:10
>>842
急いで書いたため、情報不十分でした。
各Viewboxは個別に移動、拡縮をしたいのです。
(それに応じでViewbox内のオブジェクトも、移動+拡縮させたいです)
ですので、一番目にRect3つ配置ではダメなのです。

>>843
ありがとうございます。
いただいた情報を元に考えて見ます。

845:デフォルトの名無しさん
10/05/07 00:36:07
>>844
Grid を入れ子にすれば、Grid で MouseUp をとるように変更すればできたけど・・・
もう少しスマートな方法ないかね。Viewbox 使わなければ Background に Transparent 設定してイベント透過させられるのだけど。

<Grid MouseUp="rectangle_MouseUp">
  <Viewbox />
  <Grid MouseUp="rectangle_MouseUp">
    <Viewbox />
    <Grid MouseUp="rectangle_MouseUp">
      <Viewbox />
    </Grid>
  </Grid>
</Grid>

-----------
private void rectangle_MouseUp(object sender, MouseButtonEventArgs e)
{
    ((((sender as Grid).Children[0] as Viewbox).Child as Grid).Children[1] as Rectangle).Fill = Brushes.Red;
}

846:845
10/05/07 00:40:27
Grid 全体で MouseUp とってしまうから駄目だった。
忘れてくれ。

847:デフォルトの名無しさん
10/05/07 00:43:11
つまり透過してるので最前面でFill状態の画像をムシして
その後ろの画像にヒット判定させろ?

無理じゃね?

848:デフォルトの名無しさん
10/05/07 01:05:45
いや3ついっぺんにクリックされたように扱いたいって話じゃないの?

849:デフォルトの名無しさん
10/05/07 01:09:17
>>844
読み流してた
つまり>>847なんだなごめん

850:デフォルトの名無しさん
10/05/07 01:10:43
>>848
それだったら全面のやつがイベント受けたらほかの物にも伝えるとかそんなんでいいんじゃね?
それか画像を管理してるコンテナ、この場合はGridがクリックイベント拾うとか

851:841
10/05/07 01:12:58
皆さん、ありがとうございます。
やはり透過処理していようとも、画像の領域から
イベントを透過させることは無理(難しい?)みたいですね。

>>847-848
一番の理想は、”見えているオブジェクトがイベントを拾う”です。
うpしたものを見ていただけているか分かりませんが、
例えば2番目のViewboxを仮に下方向にAnimationさせた場合、
2番目のViewboxに配置したRectangleは「黒色」の後ろに隠れます。
このとき、隠れたRectangleはクリックできないようにしたいです。

が、それはあくまでも理想であり、3つヒットでも出来るなら嬉しいです。

852:デフォルトの名無しさん
10/05/07 01:43:08
一番上が拾うんでいいならTunnelじゃいかんのかね

853:デフォルトの名無しさん
10/05/07 01:50:25
しかしwindowsはマウスありきでできてるから
こういうGUIまわりは作りにくいな

854:デフォルトの名無しさん
10/05/07 02:04:46
>>852
TunnelってPreview~のあれ?
重ねたImageに対してトンネルなんてできるのか?

855:デフォルトの名無しさん
10/05/07 21:31:34
>>841
ViewBox内のImageに
IsHitTestVisible="False"
をいれたら下のRectangleも反応したよ

ただ、これだと隠れたRectangleをクリックさせない
というようなことはできないけど

856:デフォルトの名無しさん
10/05/07 22:00:45
Imageに不透明な部分だけマスクするClipを指定すればいいんじゃないの?

857:デフォルトの名無しさん
10/05/07 23:09:28
4の良書でないかなぁ

858:デフォルトの名無しさん
10/05/08 05:54:20
WPF4のデザイナで配置したコントロールのフローがWPF3と違いますよね…?

ウィンドウのリサイズを行うと、WPF3だと勝手に連動してコントロールのサイズが変わるのに、WPF4だとウィンドウだけしかリサイズされない…。
結果、プロパティやXAMLをちょこっと変更しなければいけないのだけれど。

859:デフォルトの名無しさん
10/05/08 06:52:09
update
URLリンク(code.msdn.microsoft.com)

860:デフォルトの名無しさん
10/05/08 10:34:01
>>858
コントロールの上下左右に小さな円があるだろ
それクリックするとコンテナの端からの距離が固定される(WinFormsのAnchor相当)

861:デフォルトの名無しさん
10/05/08 11:12:39
WPFのフォントレンダリングをフォームアプリと同じにすることはできないんでしょうか?
VS2010がフォームと同じフォント表示になったのに、
自分で作ったWPFアプリケーションのフォントレンダリングが前のままです。

862:デフォルトの名無しさん
10/05/08 11:59:32
同じというのは違うけど。
3のソースを4でコンパイルするだけじゃ駄目。

TextOptions.TextFormattingMode
TextOptions.TextRenderingMode


863:デフォルトの名無しさん
10/05/08 13:08:49
FlowDocumentに表示されている内容の表示上のサイズを取得する方法はありますか?

864:デフォルトの名無しさん
10/05/08 22:23:02
>>860
クリックですか。
クリックしたところ、希望の動作になりました。

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

865:デフォルトの名無しさん
10/05/10 21:59:51
int型のプロパティPercentがあって、
それをバインドしているTextBlockでは、後ろに"%"を付けたいときって
どうすればいい?

866:デフォルトの名無しさん
10/05/10 22:01:19
IValueConverter
するまでもないな、StringFormat

867:デフォルトの名無しさん
10/05/10 22:17:23
866 なんか分かりづらくなっちゃった
{Binding Path=Percent, StringFormat=0\\%}
これでいいのか?
マークアップ拡張内は書式指定文字列が訳分からんことになるな

868:デフォルトの名無しさん
10/05/12 17:42:43
>>867
おおーまさしくこれだ。
なんで円記号が2つも…って思ったけどマークアップ拡張内では円記号もエスケープ必須か

869:デフォルトの名無しさん
10/05/12 17:45:00
途中で送信しちまった。>>867サンクス

870:デフォルトの名無しさん
10/05/12 18:13:55
GUIプログラミングの初心者は、WPFから入るよりForm使った方がいいのかな?
WPFはまだ情報量少ないみたいだし

871:デフォルトの名無しさん
10/05/12 18:18:10
>>870
最終的に何を作るかでも変わるけど似てるようでかなり違うからなあ
下手にFormの方を覚えるとWPFだと戸惑うこともあるよ

872:デフォルトの名無しさん
10/05/12 18:21:51
GUIプログラミングはWPFから入ったけど今更Formなんて勉強する気しないよ

873:デフォルトの名無しさん
10/05/12 19:48:05
>>872
最初からWPFって、どうやって学習した?
後学のために教えて欲しい。

874:デフォルトの名無しさん
10/05/12 19:53:59
>>873
ネットで情報収集。殆どはMSDNから。
書籍はエッセンシャルWPFだけ買った。
質問はここやC#スレで。
まだ全体は勉強してないけどな。目的のアプリ作るには一部だけでも十分。
C#と.NET Frameworkも同時にだったからだいぶかかったが。

875:デフォルトの名無しさん
10/05/12 19:54:50
WPFって動的にコントロールを生成しちゃいけないみたいな感じが面倒

876:デフォルトの名無しさん
10/05/12 20:02:06
え?DataTemplate使えば必然的に動的に生成しまくりだろ?

877:デフォルトの名無しさん
10/05/12 20:03:39
>>875
そんなことはないんじゃないの?
WPF側で名前つけておけばFormでやてったようなことはできるし
そういうのがだめってのならWPFなりの書き方すればいいだけだし


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