我试图在WPF中动态选择第四个十进制数。我知道使用String.Format()
我们可以,但如何选择第四或第五位小数位,但我没有得到它。我尝试过这么多类型,但仍未找到任何解决方案。我还需要使用数据绑定来获取数据。
我的最终输出如下图所示。因此,我需要选择最后两位数字以使其字体大小更大,并使用BaselineAlignment="Superscript"
。
这是我的xaml代码“检查Binding Ask ”和 stringformat 只需运行代码即可获得想法。
' <DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Button Click="OnBuyClicked">
<Button.Template>
<ControlTemplate TargetType="{x:Type Button}">
<TextBlock Background="{Binding Ask, Converter={StaticResource makeBrush}}" Foreground="White" FontSize="18" >
<TextBlock Text="{Binding Ask, StringFormat=0.###}"/>
<Run Text="{Binding Ask,StringFormat='{}{0:###01}'}" FontSize="28" />
<Run Text="{Binding Ask,StringFormat=#}" FontSize="8" BaselineAlignment="Superscript" />
</TextBlock>
</ControlTemplate>
</Button.Template>
</Button>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>'
答案 0 :(得分:0)
' <Grid>
<RichTextBox>
<FlowDocument>
<Paragraph>
<Run FontSize="10" x:Name="SmallRun" >
.567
</Run>
<Run FontSize="20" x:Name="LargeRun">
34
</Run>
<Run x:Name="PowerRun" BaselineAlignment="Superscript" FontSize="8">
4
</Run>
</Paragraph>
</FlowDocument>
</RichTextBox>
</Grid>'
这是我需要的代码和输出。但是现在这些值是静态的,但我需要从c#程序中获取值如何编码并动态绑定到xaml文件?
答案 1 :(得分:0)
您可以使用转换器格式化值,或者像@ProgrammingDude所说,只需使用这些格式创建另外3个属性。
转换器解决方案:
<Grid>
<Grid.Resources>
<converter:SmallRunConverter x:Key="SmallRunConverter"/>
<converter:LargeRunConverter x:Key="LargeRunConverter"/>
<converter:PowerRunConverter x:Key="PowerRunConverter"/>
</Grid.Resources>
<RichTextBox>
<FlowDocument>
<Paragraph>
<Run FontSize="10" Text="{Binding Ask, Converter={StaticResource SmallRunConverter}}"/>
<Run FontSize="20" Text="{Binding Ask, Converter={StaticResource LargeRunConverter}}"/>
<Run BaselineAlignment="Superscript" FontSize="8" Text="{Binding Ask, Converter={StaticResource PowerRunConverter}}" />
</Paragraph>
</FlowDocument>
</RichTextBox>
</Grid>
LargeRunConverter的示例实现(仅供您了解,根据需要修改转换逻辑):
public class LargeRunConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
double input = ((double) value) * 1000;
double decimalPart = input - Math.Truncate(input);
decimalPart = decimalPart * 100;
return string.Format("{0:00}", decimalPart);
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}