使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找到一种样式并将自己设置为WidthHeight 。 对我来说,风格位于: MahApps.Metro master \ MahApps.Metro \ Themes \ ProgressRing.xaml

  

默认情况下, WidthHeight60 。 据我所知,简单的设置WidthHeight直接影响椭圆。

EDIT:

什么会使环更小,你可以通过代码使用参数EllipseDiameterEllipseOffset ,因为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控件的WidthHeight