希望了解清理此代码的方法。有没有办法在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() { });
答案 0 :(得分: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() { });
}
答案 1 :(得分: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;
}
答案 2 :(得分: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
答案 3 :(得分:1)
使用Factory Method创建一次性传递所有需要属性的Slider对象。
答案 4 :(得分:0)
根据您需要创建这些滑块的位置,Factory Pattern的实现在此处是合适的。这将为您提供一种方法来轻松封装和重用逻辑,以创建Slider
的实例。它也可以扩展为具有多种创建方法,如果稍后需要一个不同的“样式”,就像你所说的那样。
实施例
var sliderFactory = new SliderFactory();
var Slider_1 = sliderFactory.CreateSlider();
var Slider_2 = sliderFactory.CreateSlider(SliderStyle.AnotherSliderStyle);
答案 5 :(得分:0)
重构,重构,重构。这可以全部提取到方法中。参数会像罪一样丑陋,但它会完成这项工作。
或者,使用您使用工厂模式,但这可能是过度杀伤。
工厂模式
系统设计的一个重要方面是创建对象的方式。虽然考虑对象模型和实例交互经常花费更多时间,但如果忽略这个简单的设计方面,它将对整个系统产生不利影响。因此,不仅重要的是对象的作用或它的模型,还有它的创建方式。
由于大多数面向对象的语言和运行时提供对象实例化(例如new,newobj等)和初始化(例如构造函数)机制,因此可能存在直接简单地使用这些设施而不需要预先考虑未来后果的趋势。过度使用此功能通常会在系统中引入大量不灵活性,因为直接使用语言/运行时对象实例化函数会在创建者和创建的类之间创建显式关联。虽然关联是面向对象系统中必不可少的关系类型,但如果需求发生变化(如他们总是那样),则类之间引入的耦合极难克服。
由于需要减少与之相关的固有耦合 实例创建跨越系统,看到相同的情况并不罕见 在各种不同应用中使用的解决方案类型 和框架。设计模式中的形式化:元素 可重复使用的面向对象软件(Addison-Wesley Publishing Company, 1995),这些解决方案被称为创造模式。创力 模式描述了能够实现更大的对象创建机制 不断发展的系统中的重用水平。最广泛使用的创作模式之一是工厂。这个 pattern被恰当地命名,因为它要求使用专门的 仅用于创建其他对象,就像真实世界的工厂一样。 在以下部分中,我们将检查逻辑和物理 这种模式的模型,以及讨论这种模式的使用 .NET Framework中的模式。
答案 6 :(得分: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;
}
答案 7 :(得分:0)
我没有尝试过这段代码,但你可以尝试一下for ...每个循环。对不起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
至少你只需设置一次属性