[解決済み] wpfでスタイル/テンプレートを使用して小数点以下の桁数をフォーマットする方法は?
質問
私はWPFプログラムを書いていて、スタイルやテンプレートのような繰り返し可能な方法を通してテキストボックス内のデータをフォーマットする方法を見つけようとしています。私は多くのテキストボックス(正確には95)を持っており、それぞれが定義された独自の解像度を持つことができ、それ自身の数値データにバインドされています。例えば、データが99.123で解像度が2の場合、99.12と表示されるはずです。同様に、データ値が99で解像度3なら99.000と表示されます(99ではありません)。これを実行する方法はありますか?
編集してください。 私は明確にしなければなりません、私が今作業している画面には95のTextBoxがありますが、私は私のプログラムの様々な画面を通してすべてのTextBoxが正しい小数点以下の桁数を表示するようにしたいです。今考えてみると、これらのいくつかはTextBoxであり(今作業している画面のように)、いくつかはDataGridsまたはListViewsです。
この場合、共有するコードはあまりありませんが、より明確にすることを試みます。
私は、以下のプロパティを含むビューモデルを持っています(vb.net)。
Public ReadOnly Property Resolution As Integer
Get
Return _signal.DisplayResolution
End Get
End Property
Public ReadOnly Property Value As Single
Get
Return Math.Round(_signal.DisplayValue, Resolution)
End Get
End Property
と、XAMLに書いてあります。
<UserControl.Resources>
<vm:SignalViewModel x:Key="Signal" SignalPath="SomeSignal"/>
</UserControl.Resources>
<TextBox Grid.Column="3" IsEnabled="False" Text="{Binding Path=Value, Source={StaticResource Signal}, Mode=OneWay}" />
EDIT2(私の解決策)。 しばらくパソコンから離れた後、戻ってきたらシンプルな答えが目の前にあったことが判明しました。ビューモデルでデータをフォーマットするのです!
Public ReadOnly Property Value As String
Get
Return (Strings.FormatNumber(Math.Round(_signal.DisplayValue, _signal.DisplayResolution), _signal.DisplayResolution))
End Get
End Property
どのように解決するのですか?
この場合
StringFormat
の上に
Binding
. のどちらかを使用することができます。
標準の文字列フォーマット
または
カスタム文字列フォーマット
:
<TextBox Text="{Binding Value, StringFormat=N2}" />
<TextBox Text="{Binding Value, StringFormat={}{0:#,#.00}}" />
なお
StringFormat
はターゲットのプロパティが文字列型のときのみ機能することに注意してください。のようなものを設定しようとしている場合
Content
プロパティ (
typeof(object)
) を使用する場合は、カスタム
StringFormatConverter
(
のように
) を作成し、フォーマット文字列を
ConverterParameter
.
更新された質問のために編集する
では、もしあなたの
ViewModel
が精度を定義しているのであれば、私はこれを
MultiBinding
として、そして自分自身で
IMultiValueConverter
. これは実際にはかなり厄介なことで、単純なバインディングから
MultiBinding
に展開する必要があるため、実際にはかなり面倒ですが、コンパイル時に精度がわからない場合は、これができることのほとんど全てです。あなたの
IMultiValueConverter
は値と精度を受け取り、フォーマットされた文字列を出力する必要があります。これを行うには
String.Format
.
しかし
ContentControl
のようなものでは、もっと簡単に
Style
:
<Style TargetType="{x:Type ContentControl}">
<Setter Property="ContentStringFormat"
Value="{Binding Resolution, StringFormat=N{0}}" />
</Style>
を公開するすべてのコントロールは
ContentStringFormat
を公開しているコントロールであれば、このように使用することができます。残念ながら
TextBox
にはそのようなものはありません。
関連
-
例外の解決方法 GDI+でジェネリックエラーが発生しました。
-
[解決済み] どうすれば、文字列中のリテラルな中抜き文字を印刷し、また.formatを使用することができるのでしょうか?
-
[解決済み] RelativeSourceでWPFバインディングを使用するにはどうしたらいいですか?
-
[解決済み】WPFコンボボックスのカスタムリストへのバインド
-
[解決済み】小数を常に小数点以下2桁で表示させる書式は?
-
[解決済み】文字列フォーマットで小数点以下2桁や単純な整数を表示する
-
[解決済み] MVVMテンプレートの好例
-
[解決済み] グリッドカラムの幅・高さを設定する際の「Auto」と「*」の違いは何ですか?
-
[解決済み] WPFのデータグリッドでセルの編集を無効にするには?
-
[解決済み] ViewModelLocatorとは何ですか?また、DataTemplatesと比較した場合の長所と短所は何ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Visual Studio 2015の追加デバッグオプションの無効化
-
[解決済み] DataTrigger where value is NOT null?
-
[解決済み] WPF TemplateBindingとRelativeSource TemplatedParentの比較
-
[解決済み] WPF: スクロールバー付きItemsControl (ScrollViewer)
-
[解決済み] データバインディングでWPFハイパーリンクのテキストを設定するにはどうすればよいですか?
-
[解決済み] XAML ColumnDefinitionの*(アスタリスク)の意味は?
-
[解決済み] テンプレートバインディングとバインディングとは?
-
[解決済み] DataTemplateから親DataContextにアクセスする
-
[解決済み] WPF検証エラーの検出
-
[解決済み] WPFでグリッド行を非表示にする