반응형
1.샘플이미지
2.디자인 소스코드
<UserControl x:Class="NumberTextBox.NumberInputTextBox"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:NumberTextBox">
<StackPanel Orientation="Horizontal">
<TextBox x:Name="txtNumberInput" HorizontalAlignment="Left" TextAlignment="Right" VerticalAlignment="Center" Width="120" Height="20" MaxLength="15"></TextBox>
</StackPanel>
</UserControl>
3. 프로그램 소스코드
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
namespace NumberTextBox
{
/// <summary>
/// Interaction logic for NumberTextBox.xaml
/// </summary>
public partial class NumberInputTextBox : UserControl
{
/// <summary>
/// TextBox바인드 데이터타입선언
/// </summary>
public double Amount { set; get; }
/// <summary>
/// 텍스트박스의 모든텍스트값을 리턴해줄 변수선언
/// </summary>
private string _Text { get; set; }
public string Text
{
get { return _Text; } // get method
set { _Text = value; } // set method
}
/// <summary>
/// 텍스트박스의 숫자값을 리턴해줄 상수선언
/// </summary>
private double _Number { get; set; }
public double Number
{
get { return _Number; } // get method
set { _Number = value; } // set method
}
public NumberInputTextBox()
{
InitializeComponent();
//데이터타입 바인딩 선언
Binding myBinding = new Binding("Amount");
//바인딩에 출력포맷을 설정
myBinding.Source = this; myBinding.StringFormat = "{0:N0}";
//바인딩을 갱신처리해서 바로 적용하도록 이벤트 추가
myBinding.UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged;
//텍스트박스에 바인딩을 설정
txtNumberInput.SetBinding(TextBox.TextProperty, myBinding);
//텍스트박스의 입력이벤트 선언
txtNumberInput.PreviewTextInput += txtNumberInput_PreviewTextInput;
//텍스트박스의 값 변경이벤트 선언
txtNumberInput.TextChanged += txtNumberInput_TextChanged;
}
/// <summary>
/// 텍스트박스에 숫자만 입력가능하게 수정
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void txtNumberInput_PreviewTextInput(object sender, TextCompositionEventArgs e)
{
//IsDigit함수이용
if (!char.IsDigit(e.Text, e.Text.Length - 1)) e.Handled = true;
}
/// <summary>
/// 텍스트박스의 값변경 이벤트
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void txtNumberInput_TextChanged(object sender, TextChangedEventArgs e)
{
this._Text = txtNumberInput.Text.Trim();
this._Number = Convert.ToDouble(txtNumberInput.Text.Replace(",", string.Empty) == string.Empty ? "0" : txtNumberInput.Text.Replace(",", string.Empty));
}
}
}
4. 샘플프로젝트
반응형
'WPF' 카테고리의 다른 글
TextBlock의 Text의 Inlines 추가 Text의 색상지정 (0) | 2022.02.24 |
---|---|
DataGrid의 DataGridTemplateColumn안에서 Control (TextBlock)찾기 (0) | 2022.02.24 |
ListBox의 CheckBox가져오기 (0) | 2021.08.20 |
DataGrid의 ComboBox바인딩 샘플 (0) | 2021.04.10 |
WPF 년월선택 UserControl작성 (0) | 2021.02.27 |
댓글