前回の記事を書いてから 1 年以上が経ちましたが、WPF は大きすぎて書きたいことが多すぎます。引き続きカスタム コントロールに焦点を当てて、それに関連する技術的な点について説明します。どなたでもご参加いただけます。この記事では、最も重要なことは WPF の依存関係プロパティについて説明します。WPF の依存関係プロパティについて説明する前に、そのプロパティがどのように機能するかを見てみましょう。 .net では、WPF が登場する前に使用されていました。
一般的な属性の問題
C#の基本プロパティ
ASP.NET カスタム コントロールのプロパティ
WinForm カスタム コントロールのプロパティ
Javascript カスタム コントロールのプロパティ
C#の基本プロパティ
名前空間 WPFControlTutorialPart2_Basic
{
パブリッククラスの人
{
プライベート文字列_name;
パブリック文字列名
{
{ _name を返す } を取得します。
セット { _name = 値 }
}
//自動プロパティ
public int 年齢 { セット;
}
}
上記は C# の最も基本的な属性とみなされ、誰もがよく知っています。
注: デフォルトのプロパティは初期化されていません。初期化されていないと、多くの不明なエラーが発生する可能性があります。
(以下を読むことを選択できます。以下のテクノロジーに慣れている場合は、実際には非常に簡単です)
ASP.NET カスタム コントロールのプロパティ
名前空間 WPFControlTutorialPart2_WebApp
{
パブリック クラス WebFromControl : WebControl
{
プライベート文字列_controlName;
パブリック文字列 ControlName
{
得る
{
_controlName を返します。
}
セット
{
_controlName = 値;
}
}
protected オーバーライド void RenderContents(HtmlTextWriter 出力)
{
Output.Write("コントロール名は次のとおりです:"+ControlName);
}
}
}
上記は単純なカスタム Web サーバー コントロールです。
asp.net コントロールはレンダリングに重点を置いており、プロパティが変更されたかどうかに関係なく、ページが更新されるたびに RenderContents メソッドが呼び出されます。つまり、プロパティは必要ありません。 UI の再描画を通知するための変更。
注: 入力結果の有効性を保証するために ControlName 属性に値が必須である場合は、get メソッドで処理できます。
得る
{
if (_controlName == null) _controlName = string.Empty;
_controlName を返します。
}
WinForm カスタム コントロールのプロパティ
プロパティが変更されても再描画されません。再描画するには、手動で Invalidate メソッドを呼び出して OnPaint メソッドを入力する必要があります。
注: インターフェースを再描画したい場合は、手動でメソッドを呼び出す必要があります。
JavaScript カスタム コントロールのプロパティ
<div id="demoDiv" style="background-color: Red">こんにちは</div>
<スクリプト>
関数 ElementControl(要素名) {
this.element = document.getElementById(要素名);
}
ElementControl.prototype.setWidth = function(width) {
this.element.style.width = 幅;
}
var obj = 新しいElementControl("demoDiv");
obj.setWidth("こんにちは");
</script>
JavaScript の変数型には強い型がありません。たとえば、dom の幅を設定する場合、型は整数のみです。値が文字列として渡されると、エラーが発生します (もちろんこれは人為的なものです)。
(JS フロントエンド コントロールを使用したことのある人がこのように感じるかどうかはわかりません。プロパティを定義してからコントロールを再割り当てして再描画するのは面倒な作業です。これは手動で調整する必要があり、コントロールの設計全体に影響します。 )
注: 属性の割り当てが有効であることを確認してください。
上記の例から、純粋な属性ではプログラムのニーズを満たすことができないことがわかります。
上記の要件は必要であり、頻繁に発生し、非常に頻繁に発生します。
標準化されたソリューション
上記では、属性に関する一連の問題を紹介しました。問題がある場合は、簡略化された解決策があります。
個人的なまとめは以下の通りです。
テクノロジーが比較的複雑な場合、テクノロジーを簡素化し、生産効率を向上させるために一連の標準を定義する人が現れます。
設計者がどれだけ慎重に検討しても、規格が決まってしまうと柔軟性が失われます。
標準は個人の習慣と矛盾する可能性があります。標準を受け入れることを学び、WPF のトピックに戻る必要があります。その場合、WPF での解決策は依存関係プロパティ (DependencyProperty) です。
さて、この記事は単なる紹介にすぎません。属性を使用するときにこれらの問題に遭遇したことがある方は、何らかの感情を抱くでしょう。
上記の問題が属性に関して実際に存在することがわかった場合、この記事はその役割を完了したことになります。
この記事は、さらに詳しく説明することを目的としたものではありません。次の記事では、WPF 依存関係プロパティ システムを再度紹介します。
どなたでもご議論いただけます。