-1

我对以下有关 NumericUpDown 的问题有疑问:

WPF中好的NumericUpDown等价物?

我怎么能在一年的 12 个月里做到这一点?我打算使用带有文本框的垂直滚动条。我想使用 C# 链接垂直 ScrollBar 上下单击以增加和减少文本框中的月份。

<ScrollBar x:Name="scbm" 
    HorizontalAlignment="Left" Height="26" Margin="230,195,0,0" 
    VerticalAlignment="Top" RenderTransformOrigin="0.542,0.83"/>

<TextBox x:Name="txtm" 
    HorizontalAlignment="Left" Height="23" Margin="139,195,0,0" 
    TextWrapping="Wrap" Text="" VerticalAlignment="Top" Width="66"/>

谁能告诉我如何做到这一点?

4

1 回答 1

0

你可以看看这篇用日期选择器做类似事情的文章。

基本上,您将希望拥有该月的属性,并根据您的方法(背后的代码/ mvvm),处理向上/向下按钮上的单击事件,或处理它们逻辑的键盘 keydown 事件(因此在您的情况下,添加向上/向下按钮,并将它们连接到事件,并适当地命名它们)。

例如,在你的 xaml 上有这个:

<DatePicker ... PreviewKeyDown="PreviewKeyDown_EventHandler" ...  /> 

在你的代码后面是这样的:

private void PreviewKeyDown_EventHandler(object sender, System.Windows.Input.KeyEventArgs e)
{
  // Avoid them nasty exceptions is the user hits "up" or "down" with no date selected:
  if (sender == null || ((DatePicker)sender).SelectedDate == null)
    return;

  // Do this on up 
  if (e.Key == Key.Up)
  {
     ((DatePicker)sender).SelectedDate =
    ((DatePicker)sender).SelectedDate.GetValueOrDefault().AddMonths(1);
  }

  // And this on down
  if (e.Key == Key.Down)
  {
    ((DatePicker)sender).SelectedDate =
    ((DatePicker)sender).SelectedDate.GetValueOrDefault().AddMonths(-1);
  }
}

该示例使用日期时间作为属性,但如果您想要这样做,您可以使用 int 执行类似的操作。

(再次,如果您愿意,请查看链接以获取更多选项、示例和代码示例)


编辑:

这不像文章的示例那样具有向上/向下键的好处,但这有效:

<ScrollBar x:Name="scbm" 
    SmallChange="1" Maximum="12" Minimum="1"

    Value="{Binding MonthScrollBar}"
    HorizontalAlignment="Left" Height="26" Margin="230,195,0,0" 
    VerticalAlignment="Top" RenderTransformOrigin="0.542,0.83" />

<TextBox x:Name="txtm" 
    Text="{Binding MonthScrollBar}"

    HorizontalAlignment="Left" Height="23" Margin="139,195,0,0" 
    TextWrapping="Wrap"  VerticalAlignment="Top" Width="66" />

在我的 ViewModel 上(或者你的代码隐藏,如果你愿意,做类似的事情)

public int MonthScrollBar
{
    get { return _monthScrollBar; }
    set { _monthScrollBar = value; 
          RaisePropertyChanged("MonthScrollBar");}
}
private int _monthScrollBar;

并将属性值设置为您想要的构造函数。

请注意,我正在使用 MVVM,绑定到具有通知更改的属性(因此更改正在传播到视图),并对其进行初始化。ScrollBar 和 TextBox 都绑定到同一个MonthScrollBar属性)如果你在做后面的代码,你可以直接从后面的代码中访问它。

于 2013-11-08T04:35:55.817 回答