C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[8]: WPFでImageのMarginをxamlではなくcsで指定


(過去ログ 59 を表示中)

[トピック内 11 記事 (1 - 11 表示)]  << 0 >>

■33705 / inTopicNo.1)  WPFでImageのMarginをxamlではなくcsで指定
  
□投稿者/ ダイナミック (1回)-(2009/03/07(Sat) 20:31:40)

分類:[C#] 

WindowsXP, VisualC#2008, WPFでImageのMarginをxamlではなくcsで指定する方法を教えてください。
読む込む画像のサイズによって、マージンをダイナミックに変更したいと思っていて、
それにはcsに書く必要があると思っています。
<Image Name="img" Margin="30,30,30,30">
を
img.Margin("30,30,30,30");
としてみたら、
エラー	実行不可能なメンバ 'System.Windows.FrameworkElement.Margin' 
をメソッドのように使用することはできません。
といわれています。
どなたかご教示ください。

引用返信 編集キー/
■33709 / inTopicNo.2)  Re[1]: WPFでImageのMarginをxamlではなくcsで指定
□投稿者/ Jitta on the way (283回)-(2009/03/07(Sat) 21:03:05)
No33705 (ダイナミック さん) に返信
> WindowsXP, VisualC#2008, WPFでImageのMarginをxamlではなくcsで指定する方法を教えてください。
> 読む込む画像のサイズによって、マージンをダイナミックに変更したいと思っていて、
> それにはcsに書く必要があると思っています。
> <Image Name="img" Margin="30,30,30,30">
> を
> img.Margin("30,30,30,30");
> としてみたら、
> エラー 実行不可能なメンバ 'System.Windows.FrameworkElement.Margin'
> をメソッドのように使用することはできません。
> といわれています。
> どなたかご教示ください。

そのメッセージだと、Margin はプロパティーで、何らかのクラス インスタンスを作っておいて、参照させるのだと思われます。
ところで、リファレンスは読みましたか?どの様に書いてありましたか?
引用返信 編集キー/
■33710 / inTopicNo.3)  Re[2]: WPFでImageのMarginをxamlではなくcsで指定
□投稿者/ ダイナミック (2回)-(2009/03/07(Sat) 21:12:11)
早速ありがとうございます。
xamlの指定方法はずいぶんあるのですが、.csのほうは見つけることができずにいます。

引用返信 編集キー/
■33717 / inTopicNo.4)  Re[3]: WPFでImageのMarginをxamlではなくcsで指定
□投稿者/ Hongliang (343回)-(2009/03/07(Sat) 23:30:20)
http://msdn.microsoft.com/ja-jp/library/system.windows.controls.image_members.aspx
メンバ一覧に載ってますけど?
引用返信 編集キー/
■33725 / inTopicNo.5)  Re[4]: WPFでImageのMarginをxamlではなくcsで指定
□投稿者/ ダイナミック (4回)-(2009/03/08(Sun) 14:11:03)
Marginのアドバイスありがとうございました。
早速試してみました。
imgという画像にMarginをセットしようとしています。

public Thickness Margin {get; set;}

public Window1()	{
img.Source = new BitmapImage(new Uri(@"C:\tmp.jpg"));
Thickness marginThickness = img.Margin;
marginThickness.Left = 200;
marginThickness.Top = 300;
marginThickness.Right = 200;
marginThickness.Bottom = 300;
}

としてみましたがうまく設定できず、画像がxamlに設定したウィンドウサイズに拡大されて表示されます。
<Window x:Class="WpApplication1.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Height="1000" Width="1000">
<Image Name="img" Stretch="Uniform"/>

プロパティを使うのは初めての初心者なので、使い方を間違えている気がします。
アドバイスorご教示いただけるとうれしいです。

引用返信 編集キー/
■33726 / inTopicNo.6)  Re[5]: WPFでImageのMarginをxamlではなくcsで指定
□投稿者/ かずき (29回)-(2009/03/08(Sun) 14:35:22)
Thicknessは構造体なので参照型ではないですよ。
引用返信 編集キー/
■33729 / inTopicNo.7)  Re[6]: WPFでImageのMarginをxamlではなくcsで指定
□投稿者/ 囚人 (326回)-(2009/03/08(Sun) 16:05:40)
Thickness margin = new Thickness(200, 300, 200, 300);
img.Margin = margin;

Thickness は、struct なので上記のようにしないとだめです。

引用返信 編集キー/
■33730 / inTopicNo.8)  Re[6]: WPFでImageのMarginをxamlではなくcsで指定
□投稿者/ ダイナミック (5回)-(2009/03/08(Sun) 16:44:25)
かずきさん
コメントありがとうございます。
構造体について勉強してみました。
構造体とは、クラスではないデータ構造。構造体は値型に属する。
参照型-クラス-(変数+メソッド) 複雑なデータ構造のときに使う。
値型-構造体-(変数+メソッド) 単純なデータ構造のときに使う
構造体のインスタンスは、スタック上に生成される。インスタンスとは、メモリに展開したデータのこと。

構造体の定義は、
<アクセス修飾子> struct 構造体名
とする。クラスのなかで定義する。
とすると、この場合、Thicknessは、どこでどう定義しているのでしょう?
自分で定義するとしたら、構造体はstructを使うので、

public struct Thickness{
get;
set;
public int Margin;
}
とかでしょうか。

public Window1()	{
img.Source = new BitmapImage(new Uri(@"C:\tmp.jpg"));
Thickness Marginw Thickness();
marginThickness = img.Margin;
marginThickness.Left = 200;
marginThickness.Top = 300;
marginThickness.Right = 200;
marginThickness.Bottom = 300;
}

getとsetはこれでいいのでしょうか?
やってみたら、まさにそのgetとsetのところで、「無効なトークン ';' が クラス、構造体またはインターフェイスのメンバ宣言で使用されています。」といわれてしまいました。
getとsetを削除したところ、今度は、img.Marginの行で、
「型 'System.Windows.Thickness' を型 'PictureView.PictureWindow.Thickness' に暗黙的に変換できません。」
さらに、Leftの行で、「'PictureView.PictureWindow.Thickness' に 'Left' の定義が含まれておらず、型 'PictureView.PictureWindow.Thickness' の最初の引数を受け付ける拡張メソッドが見つかりませんでした。using ディレクティブまたはアセンブリ参照が不足しています。」とエラー。
structを入れる以前にはなかったので、状況は悪化気味です。
方針についてご助言いただけるとうれしく。

引用返信 編集キー/
■33731 / inTopicNo.9)  Re[7]: WPFでImageのMarginをxamlではなくcsで指定
□投稿者/ Azulean (316回)-(2009/03/08(Sun) 17:10:53)
値型と参照型の違いを確認しましょう。

値型はコピーになり、コピーされたものが手に入る。
値型のプロパティを一時変数に代入し、その変数を操作しても、オリジナルの値は変わりません。

参照型は、実体は一つのまま、そこを操作するための参照が手に入る。
参照型のプロパティを一時変数に代入し、その変数を操作すると、オリジナルの値も変わります。

という、ざっくりとした説明です。
ケースによってはちょっと動きが異なるので鵜呑みにしないで下さい。
-----

Thickness構造体はアセンブリの中で定義されています。
今回、ご自身で同じ名前の違うものを作ったために、型が変換できない等のトラブルを起こしています。
引用返信 編集キー/
■33732 / inTopicNo.10)  Re[7]: WPFでImageのMarginをxamlではなくcsで指定
□投稿者/ ダイナミック (6回)-(2009/03/08(Sun) 17:28:02)
囚人さん。
ありがとうございました。
自分でめちゃくちゃにしてましたが、
//public Thickness Margin {get; set;}
をコメントアウトし、
Thickness margin = new Thickness(200, 300, 200, 300);img.Margin = margin;
としたところ、無事動かすことができました。
なんか、ジャングルかなにかに迷い込んで日が暮れそうになって途方にくれていた気分でしたが、無事生還できて、助かりました。
感謝します。

引用返信 編集キー/
■33733 / inTopicNo.11)  Re[8]: WPFでImageのMarginをxamlではなくcsで指定
□投稿者/ ダイナミック (7回)-(2009/03/08(Sun) 17:30:46)
Azuleanさん。コメントありがとうございます。
値型と参照型があることは漠然と知っていたのですが、直面してみてすこし理解が深まりました。
みなさん、ありがとうございました。

解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -