如果 IntegerUpDown 的值超过最大值,如何将其重置为最小值
How do I Reset value of IntegerUpDown to minimum if it exceeds maximum
我有IntegerUpDown
这样的
<xctk:IntegerUpDown Value ="{Binding SomeValue}", Maximum="2" Minimum="0"/>.
如果值为 - SomeValue == 2 (Maximum)
,我是。
我想在单击控件中的向上箭头时设置 SomeValue = 0 (Minimum)
。
我该怎么做?
如果您想在视图端执行此操作,对于简单的肮脏解决方案,您可能想尝试处理 ValueChanged 事件并检查是否达到最小值或最大值。当您达到 maximum/minimum 时,它可能不允许您更改值,因此您可能希望将您的值设置为
<xctk:IntegerUpDown Value ="{Binding SomeValue}", Maximum="3" Minimum="-1"/>.
并相应地更改为 0 或 2(如果达到)。
为了获得更好更简洁的解决方案,我不确定当您尝试更改 maximum/minimum 以外的值时会引发哪些其他事件。但是您可以创建一个基于 IntegerUpDown
的控件并覆盖 int IncrementValue(int value, int increment)
和 int DecrementValue(int value, int increment)
方法。
您可以使用值更改事件来获取当前值。在 Value changed 事件中,检查值,如果它等于 Maximum,将其设置为 Minimum,如下所示:
private void IntegerUpDown_ValueChanged(object sender, RoutedPropertyChangedEventArgs<object> e)
{
var updown = (sender as IntegerUpDown);
if (updown.Value == updown.Maximum)
updown.Value = updown.Minimum;
}
如果您使用的是 MVVM,则使用交互行为或命令来执行相同的操作。
或者,您可以将值绑定到 ViewModel 中的 属性,就像您可以将最大值、最小值绑定到 ViewModel 中的属性一样。您可以检查值 属性 的 属性 更改事件中的值,并可以将值设置为高于最大值 属性。
您还可以删除 xaml 中的 min/max 限制:
<xctk:IntegerUpDown Value ="{Binding SomeValue}" />
然后在您的视图模型中处理 min/max 限制和翻转:
public double SomeValue
{
get { return _SomeValue; }
set
{
if (value < 0)
_SomeValue = 0;
else if (value >= 2)
_SomeValue = 0;
else
_SomeValue = value;
OnPropertyChanged("SomeValue");
}
}
private double _SomeValue = 1;
我有IntegerUpDown
这样的
<xctk:IntegerUpDown Value ="{Binding SomeValue}", Maximum="2" Minimum="0"/>.
如果值为 - SomeValue == 2 (Maximum)
,我是。
我想在单击控件中的向上箭头时设置 SomeValue = 0 (Minimum)
。
我该怎么做?
如果您想在视图端执行此操作,对于简单的肮脏解决方案,您可能想尝试处理 ValueChanged 事件并检查是否达到最小值或最大值。当您达到 maximum/minimum 时,它可能不允许您更改值,因此您可能希望将您的值设置为
<xctk:IntegerUpDown Value ="{Binding SomeValue}", Maximum="3" Minimum="-1"/>.
并相应地更改为 0 或 2(如果达到)。
为了获得更好更简洁的解决方案,我不确定当您尝试更改 maximum/minimum 以外的值时会引发哪些其他事件。但是您可以创建一个基于 IntegerUpDown
的控件并覆盖 int IncrementValue(int value, int increment)
和 int DecrementValue(int value, int increment)
方法。
您可以使用值更改事件来获取当前值。在 Value changed 事件中,检查值,如果它等于 Maximum,将其设置为 Minimum,如下所示:
private void IntegerUpDown_ValueChanged(object sender, RoutedPropertyChangedEventArgs<object> e)
{
var updown = (sender as IntegerUpDown);
if (updown.Value == updown.Maximum)
updown.Value = updown.Minimum;
}
如果您使用的是 MVVM,则使用交互行为或命令来执行相同的操作。
或者,您可以将值绑定到 ViewModel 中的 属性,就像您可以将最大值、最小值绑定到 ViewModel 中的属性一样。您可以检查值 属性 的 属性 更改事件中的值,并可以将值设置为高于最大值 属性。
您还可以删除 xaml 中的 min/max 限制:
<xctk:IntegerUpDown Value ="{Binding SomeValue}" />
然后在您的视图模型中处理 min/max 限制和翻转:
public double SomeValue
{
get { return _SomeValue; }
set
{
if (value < 0)
_SomeValue = 0;
else if (value >= 2)
_SomeValue = 0;
else
_SomeValue = value;
OnPropertyChanged("SomeValue");
}
}
private double _SomeValue = 1;