私は独自のユーザー コントロールを作成しようとしていますが、ほぼ完成しており、洗練されたものを追加しようとしています。デザイナーで「親コンテナーにドッキング」するオプションが欲しいです。誰もこれを行う方法を知っていますか?私は例を見つけることができません. ドッキング属性と関係があると思います。
3 に答える
DockingAttributeも参照することをお勧めします。
[Docking(DockingBehavior.Ask)]
public class MyControl : UserControl
{
public MyControl() { }
}
これにより、コントロールの右上隅に「アクション矢印」も表示されます。
このオプションは .NET 2.0 までさかのぼって利用できます。探しているのが「親コンテナーのドッキング/ドッキング解除」機能だけであれば、はるかに簡単です。その場合、デザイナークラスは非常にやり過ぎです。
DockingBehavior.Never
また、およびのオプションも提供しますDockingBehavior.AutoDock
。Never
は矢印を表示せず、デフォルトのDock
動作で新しいコントロールをロードしAutoDock
ますが、矢印は表示しますが、コントロールを as として自動的にドッキングしFill
ます。
PS: スレッドの壊滅について申し訳ありません。私は同様のソリューションを探していましたが、これが Google で最初に表示されたものでした。Designer の属性からアイデアが得られたので、いろいろ調べてみたところ、同じ要求結果を持つ受け入れられたソリューションよりもはるかにクリーンに見える DockingAttribute を見つけました。うまくいけば、これは将来誰かを助けるでしょう。
これを実現するには、いくつかのクラスを実装する必要があります。最初にカスタムControlDesignerが必要になり、次にカスタムDesignerActionListが必要になります。どちらもかなり単純です。
ControlDesigner:
public class MyUserControlDesigner : ControlDesigner
{
private DesignerActionListCollection _actionLists;
public override System.ComponentModel.Design.DesignerActionListCollection ActionLists
{
get
{
if (_actionLists == null)
{
_actionLists = new DesignerActionListCollection();
_actionLists.Add(new MyUserControlActionList(this));
}
return _actionLists;
}
}
}
DesignerActionList:
public class MyUserControlActionList : DesignerActionList
{
public MyUserControlActionList(MyUserControlDesigner designer) : base(designer.Component) { }
public override DesignerActionItemCollection GetSortedActionItems()
{
DesignerActionItemCollection items = new DesignerActionItemCollection();
items.Add(new DesignerActionPropertyItem("DockInParent", "Dock in parent"));
return items;
}
public bool DockInParent
{
get
{
return ((MyUserControl)base.Component).Dock == DockStyle.Fill;
}
set
{
TypeDescriptor.GetProperties(base.Component)["Dock"].SetValue(base.Component, value ? DockStyle.Fill : DockStyle.None);
}
}
}
最後に、デザイナをコントロールにアタッチする必要があります。
[Designer("NamespaceName.MyUserControlDesigner, AssemblyContainingTheDesigner")]
public partial class MyUserControl : UserControl
{
// all the code for your control
簡単な説明
コントロールには、Designer
カスタムデザイナーを示す属性が関連付けられています。そのデザイナーの唯一のカスタマイズは、DesignerActionList
公開されているものです。カスタムアクションリストのインスタンスを作成し、公開されているアクションリストコレクションに追加します。
カスタムアクションリストにはbool
プロパティ(DockInParent
)が含まれ、そのプロパティのアクションアイテムが作成されます。編集中のコンポーネントのプロパティが、そうでないtrue
場合はプロパティ自体が返され、がに設定されている場合はコンポーネントのプロパティがに設定され、それ以外の場合はに設定されます。Dock
DockStyle.Fill
false
DockInParent
true
Dock
DockStyle.Fill
DockStyle.None
これにより、デザイナのコントロールの右上隅の近くに小さな「アクション矢印」が表示され、矢印をクリックするとタスクメニューがポップアップ表示されます。
コントロールが (または利用可能な他のほとんどのコントロール) から継承する場合は、プロパティをUserControl
に設定するだけです。Dock
DockStyle.Fill