我有IntegerUpDown
喜欢这个
<xctk:IntegerUpDown Value ="{Binding SomeValue}", Maximum="2" Minimum="0"/>.
如果值为 - SomeValue == 2 (Maximum)
,我就是。
我想在Control中单击向上箭头时设置SomeValue = 0 (Minimum)
。
我该怎么做?
答案 0 :(得分:2)
如果您想在View端执行此操作,对于简单的脏解决方案,您可能需要尝试处理ValueChanged事件并检查是否达到最小值或最大值。它可能不会允许您在达到最大值/最小值时更改值,因此您可能希望将值设置为
<xctk:IntegerUpDown Value ="{Binding SomeValue}", Maximum="3" Minimum="-1"/>.
如果已达到,则将其相应更改为0或2。
为了获得更好,更清洁的解决方案,我不确定当您尝试将值更改为超出最大值/最小值时会引发其他事件。但您可以基于IntegerUpDown
创建控件并覆盖int IncrementValue(int value, int increment)
和int DecrementValue(int value, int increment)
方法。
答案 1 :(得分:2)
您可以使用Value changed事件来获取当前值。在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,请使用交互行为或命令来执行相同操作。
或者可能是,您可以将Value绑定到ViewModel中的属性,就像您可以将Max,Min Value绑定到ViewModel中的属性一样。并且您可以检查Value属性的属性更改事件的值,并可以将Value on设置为高于Maximum value属性。
答案 2 :(得分:0)
您还可以删除xaml中的最小/最大限制:
<xctk:IntegerUpDown Value ="{Binding SomeValue}" />
然后在视图模型中处理最小/最大限制和翻转:
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;