【问题标题】:Why does my StringFormat not work in WPF [duplicate]为什么我的 StringFormat 在 WPF 中不起作用 [重复]
【发布时间】:2017-01-19 22:55:16
【问题描述】:

我在 SO 上看到过一些这样的问题,但没有一个答案对我有用!这是我的删节代码:

<Grid Margin="10,4,2,3">

    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="*" />
        <ColumnDefinition Width="150" />
    </Grid.ColumnDefinitions>

    <Image Name="myImage" />

    <WrapPanel Orientation="Vertical" Grid.Column="1" >
        <Label x:Name="labelDimensions" Content="Image Dimensions" />
        <Grid>
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="3*" />
                <ColumnDefinition Width="1*" />
                <ColumnDefinition Width="3*" />
            </Grid.ColumnDefinitions>

            <Label Grid.Column="0" 
                   x:Name="imageWidth" 
                   Content="{Binding Path=ActualWidth, 
                             ElementName=myImage, 
                             StringFormat={}{0:1234.5}}" />
            <Label Grid.Column="1" x:Name="label3" Content=" x " />
            <Label Grid.Column="2" 
                   x:Name="imageHeight" 
                   Content="{Binding Path=ActualHeight, 
                             ElementName=myImage, 
                             StringFormat={}{0:1234.5}}" />
        </Grid>
    </WrapPanel>

</Grid>

我希望在“图像尺寸”标签下方看到“641.3 x 480.0”之类的东西,但无论我做什么,它都会出现“641.30000000 x 480”之类的东西。

我有 {0:1234.5} 和 {0:#,#.#} 之类的格式,但它们都没有任何效果。我也尝试过 ConentStringFormat 作为建议的一个 SO 答案,但它甚至没有编译。

任何建议将不胜感激。

【问题讨论】:

  • 显然,如果您的格式中没有前导纯文本,则需要它们。没有它们,它不会编译。
  • 你试过{0:F1}吗? (见Standard Numeric Format Strings。)
  • 我现在有。当我调整它的大小时,我得到像“639.00000 x 426.00000”这样的东西,所以没有区别。我不认为它是格式字符串本身,其他东西似乎让 WPF 完全忽略它。
  • 干杯伙计们,链接的问题有答案(就像我读过的其他问题一样,我只是没有建立正确的联系)。一旦我使用了 TextBlock 而不是 标签,StringFormat 就起作用了。 ContentStringFormat 没有编译,也许我的目标是错误的 .Net 版本。
  • ContentStringFormat 不在绑定内。它本身就是一个 Control 属性。 &lt;Label Content="{Binding LastModTs}" Grid.Column="2" ContentStringFormat="{}{0:dd.MM.yyy HH:mm}" /&gt;

标签: c# wpf xaml string-formatting


【解决方案1】:

请改用ContentStringFormat

StringFormat 仅在绑定到 String 类型的属性时使用。 LabelContent 属性是对象类型,如您所见 here,因此 StringFormat 将不起作用。

【讨论】:

    【解决方案2】:

    尝试给StringFormat={}{0:F1}

    <Label Grid.Column="0" 
           x:Name="imageWidth" 
           Content="{Binding Path=ActualWidth, 
                     ElementName=myImage, 
                     StringFormat={}{0:F1}" />
    <Label Grid.Column="1" x:Name="label3" Content=" x " />
    <Label Grid.Column="2" 
            x:Name="imageHeight" 
            Content="{Binding Path=ActualHeight, 
                      ElementName=myImage, 
                      StringFormat={}{0:F1}" />
    

    【讨论】:

      猜你喜欢
      • 2011-01-16
      • 1970-01-01
      • 1970-01-01
      • 2010-09-16
      • 2019-01-15
      • 1970-01-01
      • 2017-05-24
      • 2011-09-29
      • 2018-01-05
      相关资源
      最近更新 更多