Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 仅在C中的WPF应用程序中检索数值的最佳方法#_C#_Wpf_User Interface_Wpf Controls - Fatal编程技术网

C# 仅在C中的WPF应用程序中检索数值的最佳方法#

C# 仅在C中的WPF应用程序中检索数值的最佳方法#,c#,wpf,user-interface,wpf-controls,C#,Wpf,User Interface,Wpf Controls,我正在寻找一种方法来检索并强制用户在WPF应用程序(用C#开发)中输入int值 最好的方法是什么?我见过“TextBox”可以通过值解析来完成这项工作,但我想知道是否有更好的方法可以通过另一个WPF控件(而不是TextBox)来帮助用户更轻松地完成这项工作(例如,使用向上或向下按钮来递增或递减) 我们的目标是通过在“价值”选择过程中“引导”他来简化用户体验我很快就为你们写了这篇文章。这不是最有效的方法,您还可以实现更多验证,如十进制数或非负数。此外,您还可以设置TexBoxIsReadOnly=

我正在寻找一种方法来检索并强制用户在WPF应用程序(用C#开发)中输入int值

最好的方法是什么?我见过“TextBox”可以通过值解析来完成这项工作,但我想知道是否有更好的方法可以通过另一个WPF控件(而不是TextBox)来帮助用户更轻松地完成这项工作(例如,使用向上或向下按钮来递增或递减)


我们的目标是通过在“价值”选择过程中“引导”他来简化用户体验

我很快就为你们写了这篇文章。这不是最有效的方法,您还可以实现更多验证,如十进制数或非负数。此外,您还可以设置
TexBox
IsReadOnly=true
,以确保用户不输入任何非数值

你们可以做很多事情!这只是给你一个想法

XAML

<StackPanel Orientation="Horizontal" Width="200" VerticalAlignment="Center" HorizontalAlignment="Center">
    <TextBox x:Name="NumberBox" VerticalAlignment="Center" Width="120" Text="0"></TextBox>
    <StackPanel Orientation="Vertical" VerticalAlignment="Center" 
                Margin="2 0 0 0" Spacing="1">
        <Button x:Name="UpBtn" Width="50" Height="25" Click="IncrementDecrement">▲</Button>
        <Button x:Name="DownBtn" Width="50" Height="25"  Click="IncrementDecrement">▼</Button>
    </StackPanel>
</StackPanel>  
结果


我不是WPF专家,但您可以在文本框(直接在XAML中)上实现验证规则。最简单和(IMHO)的建议意见是“明确它必须包含一个数字”。关于“澄清”,我指的是文本框的描述(工具提示、标签等等)和文本框的验证(参见更多,验证:),另一方面,还有另一个选项“违反MVVM的纯概念”:只需使用
绑定
类型
int
的属性。验证将自动执行。用户将看到无效值的红色笔划。
private void IncrementDecrement(object sender, RoutedEventArgs e)
{
    var senderBtn = sender as Button;
    var value = NumberBox.Text.Trim();
    if (string.IsNullOrEmpty(value))
    {
        value = 0.ToString();
    }
    bool success = Int32.TryParse(value, out var number);
    if (!success)
    {
        // show error
        return;
    }

    NumberBox.Text = senderBtn.Name == "UpBtn" ? (++number).ToString() : (--number).ToString();
}