0

このコードをクリーンアップする方法を学びたいと思っています。c#で定義された「スタイル」を適用する方法はありますか? 私は新しく、プログラミングを強化する方法を探しています。マージン、最大値、向き、ステップ頻度、目盛り頻度、目盛りの配置、および各スライダーへの遷移をより簡潔な方法で定義できるようにしたいと考えています。

        //Slider 1
        Slider Slider_1 = new Slider();
        Slider_1.SetValue(Grid.ColumnProperty, 0);
        Slider_1.Margin = new Thickness(30, 12, 0, 0);
        Slider_1.Orientation = Orientation.Vertical;
        Slider_1.Maximum = 10;
        Slider_1.StepFrequency = 0.25;
        Slider_1.TickFrequency = 0.25;
        Slider_1.TickPlacement = TickPlacement.Outside;
        Slider_1.Transitions = new TransitionCollection();
        Slider_1.Transitions.Add(new EntranceThemeTransition() { });

        //Slider 2
        Slider Slider_2 = new Slider();
        Slider_2.SetValue(Grid.ColumnProperty, 1);
        Slider_2.Margin = new Thickness(30, 12, 0, 0);
        Slider_2.Orientation = Orientation.Vertical;
        Slider_2.Maximum = 10;
        Slider_2.StepFrequency = 0.25;
        Slider_2.TickFrequency = 0.25;
        Slider_2.TickPlacement = TickPlacement.Outside;
        Slider_2.Transitions = new TransitionCollection();
        Slider_2.Transitions.Add(new EntranceThemeTransition() { });

        //Slider 3
        Slider Slider_3 = new Slider();
        Slider_3.SetValue(Grid.ColumnProperty, 2);
        Slider_3.Margin = new Thickness(30, 12, 0, 0);
        Slider_3.Orientation = Orientation.Vertical;
        Slider_3.Maximum = 10;
        Slider_3.StepFrequency = 0.25;
        Slider_3.TickFrequency = 0.25;
        Slider_3.TickPlacement = TickPlacement.Outside;
        Slider_3.Transitions = new TransitionCollection();
        Slider_3.Transitions.Add(new EntranceThemeTransition() { });

        //Slider 4
        Slider Slider_4 = new Slider();
        Slider_4.SetValue(Grid.ColumnProperty, 3);
        Slider_4.Margin = new Thickness(30, 12, 0, 0);
        Slider_4.Orientation = Orientation.Vertical;
        Slider_4.Maximum = 10;
        Slider_4.StepFrequency = 0.25;
        Slider_4.TickFrequency = 0.25;
        Slider_4.TickPlacement = TickPlacement.Outside;
        Slider_4.Transitions = new TransitionCollection();
        Slider_4.Transitions.Add(new EntranceThemeTransition() { });
4

8 に答える 8

6
Slider Slider_1 = new Slider(); 
SetProperties(Slider_1,.....)


public void SetProperties(Slider slider,some other parameters)
{
    slider.SetValue(Grid.ColumnProperty, 0);
    slider.Margin = new Thickness(30, 12, 0, 0);
    slider.Orientation = Orientation.Vertical;
    slider.Maximum = 10;
    slider.StepFrequency = 0.25;
    slider.TickFrequency = 0.25;
    slider.TickPlacement = TickPlacement.Outside;
    slider.Transitions = new TransitionCollection();
    slider.Transitions.Add(new EntranceThemeTransition() { });
}
于 2012-08-21T18:48:17.950 に答える
2

すべてのプロパティの値がまったく同じである場合は、Slider オブジェクトを作成する関数を作成できます。次のようなものです。

private Slider GetSlider()
{
    var slider = new Slider() {            
        Margin = new Thickness(30, 12, 0, 0),
        Orientation = Orientation.Vertical,
        Maximum = 10,
        StepFrequency = 0.25,
        TickFrequency = 0.25,
        TickPlacement = TickPlacement.Outside,
        Transitions = new TransitionCollection()            
    };

    slider.SetValue(Grid.ColumnProperty, 1);
    slider.Transitions.Add(new EntranceThemeTransition() { });

    return slider;
}
于 2012-08-21T18:48:43.853 に答える
1

スライダーを受け取り、パラメーターで渡されたプロパティを設定するメソッドを実行できます

private Slider CreateSlider(int columnProperty, Thickness thickness, short orientation
    int maximum, double stepFrequency, double  tickFrequency, short tickPlacement )
{ Slider slider = new slider
  slider.SetValue(Grid.ColumnProperty, columnProperty);
  slider.Margin = thickness;
  slider.Orientation = orientation;
  slider.Maximum = maximum;
  slider.StepFrequency = stepFrequency;
  slider.TickFrequency = tickFrequency;
  slider.TickPlacement =tickPlacement 
  slider.Transitions = new TransitionCollection();
  slider.Transitions.Add(new EntranceThemeTransition() { });
return slider

}

値を渡して使用します

Slider slider_1 = CreateSlider(0, new Thickness(30, 12, 0, 0), (short)Orientation.Vertical, 
        10, 0.25, 0.25,  (short)TickPlacement.Outside )

typesいくつかの値(enumsたとえば)を想定しています。正しいものを入力する必要がありますtypes

于 2012-08-21T18:46:56.157 に答える
1

Factory Method を使用して、必要なすべてのプロパティを一度に渡す Slider オブジェクトを作成します。

于 2012-08-21T18:49:11.377 に答える
0

これらのスライダーを作成する必要がある場所に応じて、Factory パターンの実装が適切です。これにより、 のインスタンスを作成するためのロジックを簡単にカプセル化して再利用する方法が提供されますSlider。また、後で別の「スタイル」が必要になった場合に備えて、複数の作成方法を持つように拡張することもできます。

var sliderFactory = new SliderFactory();
var Slider_1 = sliderFactory.CreateSlider();
var Slider_2 = sliderFactory.CreateSlider(SliderStyle.AnotherSliderStyle);
于 2012-08-21T18:52:52.523 に答える
0

リファクタリング、リファクタリング、リファクタリング。これはすべてメソッドに抽出できます。パラメータは罪のように醜いですが、それは仕事をします。

または、ファクトリ パターンを使用しますが、ここではやり過ぎかもしれません。

工場パターン

システム設計の重要な側面は、オブジェクトの作成方法です。多くの場合、オブジェクト モデルとインスタンスの相互作用を考慮するのにはるかに多くの時間が費やされますが、この単純な設計の側面を無視すると、システム全体に悪影響を及ぼします。したがって、オブジェクトが何をするか、何をモデル化するかだけでなく、それがどのように作成されたかも重要です。

ほとんどのオブジェクト指向言語およびランタイムは、オブジェクトのインスタンス化 (new、newobj など) および初期化 (コンストラクターなど) メカニズムを提供するため、将来の結果を考慮せずにこれらの機能を直接使用する傾向がある場合があります。言語/実行時オブジェクトのインスタンス化関数を直接使用すると、作成者クラスと作成されたクラスの間に明示的な関連付けが作成されるため、この機能を過度に使用すると、システムの柔軟性が大幅に低下することがよくあります。アソシエーションはオブジェクト指向システムで必要なタイプの関係ですが、要件が変更された場合 (常にそうであるように)、クラス間に導入された結合を克服することは非常に困難です。

インスタンスの作成に関連する固有の結合をシステム間で削減する必要があるため、同じタイプのソリューションがさまざまなアプリケーションやフレームワークで使用されていることは珍しくありませんでした。Design Patterns: Elements of Reusable Object-Oriented Software (Addison-Wesley Publishing Company、1995 年) 内で形式化されたこれらのソリューションは、作成パターンとして知られています。作成パターンは、進化するシステムでより高いレベルの再利用を可能にするオブジェクト作成メカニズムを記述します。

最も広く使用されている作成パターンの 1 つは、Factory です。このパターンは、現実世界の工場のように、他のオブジェクトを作成するためだけに特殊なオブジェクトを使用する必要があるため、適切な名前が付けられています。以下のセクションでは、このパターンの論理モデルと物理モデルを検証し、.NET Framework でのこのパターンの使用方法の 1 つについて説明します。

http://msdn.microsoft.com/en-us/library/ee817667.aspx

于 2012-08-21T18:53:24.223 に答える
0

リストを使用する、オブジェクトの初期化を使用する、デフォルトおよび名前付きパラメーターを持つメソッドを使用する。

var sliderList = new List<Slider>() {
   CreateDefaultSlider(),
   CreateDefaultSlider(),
   CreateDefaultSlider(gridCol = 3), //example of customizatiom
};

public Slider CreateDefaultSlider(int gridCol = 0, int max = 10, float stepFreq = 0.25, float tickFreq = 0.25, int tX1 = 30, int tY1 = 12, int tX1 = 0, int tY2 = 0) {
   var slider = new Slider {
      Margin = new Thickness(tX1, tY1, tX2, tY2),
      Orientation = Orientatian.Vertical, //not sure these work with default params
      Maximum = max,
      StepFrequency = stepFreq,
      TickFrequency = tickFreq,
      TickPlacement = TickPlacement.Outside,
      Transitions = new TransitionCollection()
  };
   slider.SetValue(Grid.ColumnProperty, gridCol);
   slider.Transitions.Add(new EntranceThemeTransition());
   return slider;
}
于 2012-08-21T18:57:12.590 に答える
0

このコードはまだ試していませんが、for...each ループを試すことができます。Vbで申し訳ありませんが...

   For Each slider as Slider in Controls
            slider.SetValue(Grid.ColumnProperty, 0);
            slider.Margin = new Thickness(30, 12, 0, 0);
            slider.Orientation = Orientation.Vertical;
            slider.Maximum = 10;
            slider.StepFrequency = 0.25;
            slider.TickFrequency = 0.25;
            slider.TickPlacement = TickPlacement.Outside;
            slider.Transitions = new TransitionCollection();
            slider.Transitions.Add(new EntranceThemeTransition() { });

    Next

少なくとも、プロパティを一度だけ設定する必要があります

于 2012-08-21T19:00:42.317 に答える