このようなコントロールは、コンテナプロジェクトで使用する必要がある場合はinternal
とすることができます。要件に基づいて公開することができます。また、内部であるので、friend assembliesでも同様に使用できます。あなたは難易度を下げることができ、オプションとして
オプション1
:
とにかく
DesignTimeVisible
のオン/オフの困難さを軽減するには、これらのオプションを検討することができ、あなたが探しているものですDesignTimeVisible
属性のオン/オフを切り替えます。すべてのクラスをDesignTimeVisible
で一度だけ飾ることはできますが、中心点からその値を制御します。これを行うには、設定を保持するクラスを作成するには
:
public class MyGlobalSettings
{
public const bool DesignTimeVisible = false;
}
その後のコントロールをこのように飾る:
[DesignTimeVisible(MyGlobalSettings.DesignTimeVisible)]
public partial class UserControl1 : UserControl
次に、ツールボックスのコントロールを示すオン/オフするために、それは設定には十分ですDesignTimeVisible
。このように、単なる一点設定です。
オプション2
あなたのコントロールのための部分的なクラスを生成するT4テンプレートを使用することができます別のオプション。ファイルには、DesignTimeVisible
属性の値として使用される変数を含めることができます。次に、T4テンプレートで、指定された値を持つDesignTimeVisible
ですべての部分クラスを飾ります。単一のポイントで値を変更するだけで済みます。
クラス名は、コードを使用して自動的に生成することができますが、この例では、私は、静的なクラス名を使用:
<#@ template debug="false" hostspecific="false" language="C#" #>
<#@ assembly name="System.Core" #>
<#@ import namespace="System.Linq" #>
<#@ import namespace="System.Text" #>
<#@ import namespace="System.Collections.Generic" #>
<#@ output extension=".cs" #>
<# var designTimeVisibleValue = "false"; #>
using System.Windows.Controls;
using System.ComponentModel;
namespace WpfCustomControlLibrary1
{
[DesignTimeVisible(<#=designTimeVisibleValue#>)]
public partial class UserControl1 : UserControl{}
[DesignTimeVisible(<#=designTimeVisibleValue#>)]
public partial class UserControl2 : UserControl{}
}
注
また、コメントで述べたように、あなたはFodyのようなツールを使用することができ、 PostSharp、dIHook、...ビルド時にアセンブリを変更するそのような要件のためだけにこれらのライブラリを使用することはあまりにも多くなります。そのようなツールは多くの利点を持つことができますが、そのような要件のためにそれらを使用することはあまりにも多くのことではありません。
使用するVisual Studioのバージョンはどれですか? –
Visual Studio 2012 - 2015 - 20XX – KroaX
私はあなたの質問に答えていない、私はちょうど別のアプローチをお勧めします。 AOPツールを使用して各コントロールにアトリビュートを追加するか、同じ目的のためにILウィービング([Fody](https://github.com/Fody/Fody)など)を使用します。 –