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

使用工厂方法创建 Slider 对象,一次传递所有需要的属性。

于 2012-08-21T18:49:11.377 回答
0

根据您需要创建这些滑块的位置,工厂模式的实现将适合此处。这将为您提供一种轻松封装和重用用于创建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 等)和初始化(例如构造函数)机制,因此可能倾向于直接使用这些工具而不考虑未来的后果。过度使用此功能通常会在系统中引入大量的不灵活性,因为直接使用语言/运行时对象实例化函数会在创建者和创建的类之间创建显式关联。虽然在面向对象的系统中关联是一种必要的关系类型,但如果需求发生变化(正如它们总是如此),类之间引入的耦合是极难克服的。

由于需要减少与跨系统创建实例相关的固有耦合,因此在各种不同的应用程序和框架中使用相同类型的解决方案并不少见。在设计模式中形式化:可重用面向对象软件的元素(Addison-Wesley Publishing Company,1995),这些解决方案被称为创建模式。创建模式描述了对象创建机制,可以在不断发展的系统中实现更高级别的重用。

最广泛使用的创建模式之一是工厂。这种模式被恰当地命名,因为它要求使用专门的对象来创建其他对象,就像现实世界的工厂一样。在接下来的部分中,我们将检查这种模式的逻辑和物理模型,并讨论这种模式在 .NET Framework 中的一种使用。

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 回答