Excel-поведение как текстовое поле wpf - PullRequest
1 голос
/ 30 декабря 2011

Я хочу создать текстовое поле, в котором текст связывает целое число (например, 123456789), но в нем отображается разделитель тысяч (например, 123.456.789), но когда я выбираю текстовое поле для редактирования, строка возвращается без разделителя, пока текстовое поле не потеряетсяфокус, как в Excel.Любой совет?спасибо!

Ответы [ 2 ]

2 голосов
/ 30 декабря 2011

Использовать триггер, который форматирует значение, если TextBox не выбран

<Style TargetType="{x:Type TextBox}">
    <Setter Property="Text" Value="{Binding SomeValue, StringFormat=N2}" />
    <Style.Triggers>
        <Trigger Property="IsKeyboardFocusWithin" Value="True">
            <Setter Property="Text" Value="{Binding SomeValue}" />
        </Trigger>
    </Style.Triggers>
</Style>

Вы также можете использовать конвертер для форматирования, если вы не можете легко отформатировать с помощью StringFormat

0 голосов
/ 30 декабря 2011

одна возможность:

Вы добавляете стиль, который создает триггер на IsFocused. в триггере вы устанавливаете новый шаблон, в котором у вас есть другое форматирование:

<Grid>
  <Grid.Resources>
    <System:Double x:Key="boundDouble">1000</System:Double>
    <System:Double x:Key="boundDouble2">2000</System:Double>
  </Grid.Resources>
  <TextBox Width="100" Height="30">
    <TextBox.Text>
      <Binding Source="{StaticResource boundDouble}" Path="." StringFormat="{}{0:F3}" />
    </TextBox.Text>
    <TextBox.Style>
      <Style TargetType="TextBox">
        <Style.Triggers>
          <Trigger Property="IsFocused" Value="true">
            <Setter Property="Template">
              <Setter.Value>
                <ControlTemplate TargetType="TextBox">
                  <TextBox>
                  <TextBox.Text>
                    <Binding Source="{StaticResource boundDouble}" Path="." StringFormat="{}{0:F5}" />
                  </TextBox.Text>
                  </TextBox>
                </ControlTemplate>
              </Setter.Value>
            </Setter>
          </Trigger>
        </Style.Triggers>
      </Style>
    </TextBox.Style>
  </TextBox>
</Grid>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...