ユーザーが4文字を入力するとハイフンがテキストに追加され、再びユーザーが4文字を入力すると再びハイフンがWPFに自動的に追加されるようにする必要があります。
ノート
「ユーザーがテキストボックスに入力しているときに(テキストボックスがフォーカスを失った後ではなく)この動作を実装したいのは、後で実装するのが非常に簡単だからです」
MVVM モデルを使用するため、Dialog の背後にあるコードは空にする必要があります
ユーザーが4文字を入力するとハイフンがテキストに追加され、再びユーザーが4文字を入力すると再びハイフンがWPFに自動的に追加されるようにする必要があります。
ノート
「ユーザーがテキストボックスに入力しているときに(テキストボックスがフォーカスを失った後ではなく)この動作を実装したいのは、後で実装するのが非常に簡単だからです」
MVVM モデルを使用するため、Dialog の背後にあるコードは空にする必要があります
以下のようなビューモデルのプロパティでこれを行うことができます。ただし、テキスト ボックス キャレットのカーソルが最後のインデックスに移動しないことがわかります。キャレット インデックスはバインド可能ではないため、インデックスにバインドする添付プロパティを作成する必要があります。
private string _serial;
public string Serial
{
get { return _serial; }
set
{
if (_serial != value)
{
_serial = value;
int res = 0;
Math.DivRem(_serial.Length, 4, out res);
if (res == 0)
Serial = string.Format("{0}-", _serial);
CaretIndex = _serial.Lenght - 1;
RaisePropertyChanged("Serial");
}
}
}
必要な xaml コードは次のとおりです。
<Window x:Name="root" x:Class="WpfApplication1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="WpfApplication1"
Title="MainWindow" Height="350" Width="525">
<TextBox
Text="{Binding ElementName=root, Path=Serial, UpdateSourceTrigger=PropertyChanged}"
local:TextIndexBinder.Index="{Binding ElementName=root, Path=Index}"
/>
</Window>