.NET double отображается по-разному при отображении в текстовом поле или метке (WPF)

#.net #textbox #label #double #precision

#.net #текстовое поле #метка #double #точность

Вопрос:

Когда наименее значимые значения double отличны от нуля, он отображается с разной точностью в зависимости от того, какой элемент управления его отображает.

В моем случае я попытался использовать текстовое поле и метку. toString, похоже, дает тот же результат, что и текстовое поле. Однако элемент управления Label обеспечивает большую точность.

Вот пример (просто проведите большим пальцем, чтобы увидеть, что я имею в виду):

 <Window x:Class="SliderTest.SliderTestWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="SliderTestWindow" Height="300" Width="300">
<StackPanel>
    <Slider Name="slider" TickFrequency="0.1" IsSnapToTickEnabled="True" />
    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="Auto"/>
            <ColumnDefinition Width="*"/>
        </Grid.ColumnDefinitions>
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto" />
            <RowDefinition Height="Auto" />
        </Grid.RowDefinitions>
        <TextBlock Grid.Row="0" Grid.Column="0">Value</TextBlock>
        <TextBox Grid.Row="0" Grid.Column="1" Text="{Binding ElementName=slider, Path=Value}" />
        <TextBlock Grid.Row="1" Grid.Column="0">Value</TextBlock>
        <Label Grid.Row="1" Grid.Column="1" Content="{Binding ElementName=slider, Path=Value}" />
    </Grid>
</StackPanel>
  

Почему используется другой способ отображения двойников в каждом элементе управления?

Что я могу сделать, чтобы отображать двойные значения в метке так же, как они отображаются в текстовом поле?

Ответ №1:

Вы можете предоставить строку формата для привязки. Пример использования средства форматирования валюты является:

 <TextBox Text="{Binding Path=Double, StringFormat=F3}"/>
<TextBox Text="{Binding Path=Double, StringFormat=Amount: {0:C}}"/>
<TextBox Text="{Binding Path=Double, StringFormat=Amount: {0:C}}"/>
<TextBox>
  <TextBox.Text>
    <Binding Path="Double" StringFormat="{}{0:C}"/>
  </TextBox.Text>
</TextBox>
  

Источник:
http://blogs.msdn.com/b/llobo/archive/2008/05/19/wpf-3-5-sp1-feature-stringformat.aspx

Справка по формату строки: http://alexonasp.net/samples/stringformatting /