使MahApps.Metro中的ProgressRing更小
看起来MahApps.Metro ProgressRing控件默认为最小尺寸为60×60。
ProgressRing有一个名为“IsLarge”的属性,但即使它被设置为“False”,它似乎对能够使ProgressRing小于60×60没有影响。
不经意地改变高度和宽度属性也不会影响这一点。
将GitHUb视为ProgressRing的实际c#代码,看起来有几个属性会影响椭圆直径等,但这些属性是私有属性,不能从外部调用设置。
我怎样才能让它变小? 说20×20或30×30?
在下面的代码中,我指定IsLarge = False,并将大小设置为30×30,但它仍然默认为60×60。
下面是GitHub上的“ProgressRing.cs”文件的代码片段- MahApps.Metro
namespace MahApps.Metro.Controls { [TemplateVisualState(Name = "Large", GroupName = "SizeStates")] [TemplateVisualState(Name = "Small", GroupName = "SizeStates")] [TemplateVisualState(Name = "Inactive", GroupName = "ActiveStates")] [TemplateVisualState(Name = "Active", GroupName = "ActiveStates")] public class ProgressRing : Control private void SetMaxSideLength(double width) { MaxSideLength = width <= 60 ? 60.0 : width; } private void SetEllipseDiameter(double width) { if (width VisualStateManager.GoToState(this, "Large", true); else action = () => VisualStateManager.GoToState(this, "Small", true); if (_deferredActions != null) _deferredActions.Add(action); else action(); }
编辑:MainWindow.xaml
编辑:MainWindow.xaml.cs
public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); PRing.EllipseDiameter = 5; } }
您必须为ProgressRing
找到一种样式并将自己设置为Width
和Height
。 对我来说,风格位于: MahApps.Metro master \ MahApps.Metro \ Themes \ ProgressRing.xaml
:
默认情况下, Width
和Height
为60
。 据我所知,简单的设置Width
和Height
直接影响椭圆。
EDIT:
什么会使环更小,你可以通过代码使用参数EllipseDiameter
和EllipseOffset
,因为XAML它们将不可用(作为私有 )。
private void SetEllipseDiameter(double width) { if (width <= 60) { EllipseDiameter = 3.0; // as default 6.0 } else { EllipseDiameter = width * 0.1 + 6; } } private void SetEllipseOffset(double width) { if (width <= 60) { EllipseOffset = new Thickness(0, 12, 0, 0); // as default 24 } else { EllipseOffset = new Thickness(0, width * 0.4 + 12, 0, 0); } }
EDIT2:
设置Ellipse
的直径可以如下完成。 我们有EllipseDiameter
setter public属性:
public double EllipseDiameter { get { return (double)GetValue(EllipseDiameterProperty); } set // default as private { SetValue(EllipseDiameterProperty, value); } }
在SetEllipseDiameter
中检查Ellipse
的大小,如果Width
小于60,则设置为6.0。 我们评论出来。
private void SetEllipseDiameter(double width) { //if (width <= 60) //{ // EllipseDiameter = 6.0; //} //else //{ // EllipseDiameter = width * 0.1 + 6; //} }
在Style
设置Ellipse
的直径:
EllipseOffset
。 他也是第一次私人 ,并检查Width
小于60:
private void SetEllipseOffset(double width) { // you can drop this check if (width <= 60) { EllipseOffset = new Thickness(0, 24, 0, 0); } else { EllipseOffset = new Thickness(0, width * 0.4 + 24, 0, 0); } }
使用这些参数伪造这些操作,您可以配置ProgressRing
控件的Width
和Height
。