WPFプロジェクトには、個々のMargin
プロパティを設定し、他の値を保存できるようにするための一連のコントロールがあります。Thickness
したがって、完全なマージンを新しい( )に設定することは避けたいと思いMargin="0,5,0,15"
ます。多くのマージンはスタイルなどから設定されているためです。しかし、個々のケースでは、特定のコントロールの一般的なスタイルから逸脱したいと思います。
このように.NETクラスにいくつかの新しい依存関係プロパティを登録してみませんかFrameWorkElement
(たとえば、MarginLeftのみが表示されています)。
public class FrameWorkElementExtensions: FrameworkElement
{
public static readonly DependencyProperty MarginLeftProperty = DependencyProperty.Register("MarginLeft", typeof(Int16?), typeof(FrameworkElement), new PropertyMetadata(null, OnMarginLeftPropertyChanged));
public Int16? MarginLeft
{
get { return (Int16?)GetValue(MarginLeftProperty); }
set { SetValue(MarginLeftProperty, value); }
}
private static void OnMarginLeftPropertyChanged(object obj, DependencyPropertyChangedEventArgs e)
{
if (obj != null && obj is UIElement)
{
FrameworkElement element = (FrameworkElement)obj;
element.Margin = new Thickness((Int16?)e.NewValue ?? 0, element.Margin.Top, element.Margin.Right, element.Margin.Bottom);
}
}
}
ただし、このプロパティは、分離コードまたはXAMLでは使用できません。このダミークラスはインスタンス化されないので、どういうわけか理解できます。静的クラスにしようとしましたが、FrameWorkElement(GetValueメソッドとSetValueメソッドに必要)から派生できません。
より一般的な質問を扱うリソースがネット上に見つかりませんでした。既存の.NETクラスに依存関係プロパティを追加できますか?
任意のヘルプ/賢明なアドバイスをいただければ幸いです。
ところで:マージン(厚さ)の1つのコンポーネントのみを変更するためのソリューションも高く評価されています;)