C# 如何使用绑定动态选择第四位小数

C# 如何使用绑定动态选择第四位小数,c#,wpf,xaml,C#,Wpf,Xaml,我试图在WPF中动态选择第四个十进制数。我知道使用String.Format,但我们可以选择第四位或第五位小数,但我不知道。我尝试了这么多类型,但仍然没有找到任何解决方案。我还需要使用数据绑定获取数据 我的最终输出如图所示。所以我需要选择最后两位数字,使其字体更大,并使用BaselineAlignment=Superscript 这是我在Binding Ask和stringformat上的xaml代码检查,只是运行代码来了解一下 ' <DataGridTemplateColumn.Cel

我试图在WPF中动态选择第四个十进制数。我知道使用String.Format,但我们可以选择第四位或第五位小数,但我不知道。我尝试了这么多类型,但仍然没有找到任何解决方案。我还需要使用数据绑定获取数据

我的最终输出如图所示。所以我需要选择最后两位数字,使其字体更大,并使用BaselineAlignment=Superscript

这是我在Binding Ask和stringformat上的xaml代码检查,只是运行代码来了解一下

' <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>'

这是我需要的代码和输出。但是现在这些值是静态的,但是我需要从c程序中获取这些值,如何动态编码并绑定到xaml文件?

您可以使用转换器格式化这些值,或者像@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>

听起来你需要一个自定义绑定,我不相信你能用WPF的内置数据绑定语法做到这一点。谢谢你的回复,我不知道如何使用自定义绑定。你能帮我吗?或者给我举个例子。这会更有帮助。嗯,他们有什么确切的解决办法吗?怎么做?不幸的是,你的问题一点也不清楚。这个号码到底在哪里?它应该是一个模型数据结构;既然如此,约束和这个问题有什么关系?为什么不直接从模型中提取数字呢?选择第四个数字与您描述的格式问题有何关系?您可能需要使用RichTextBox或类似工具来实现后者,但如果没有更多详细信息,则无法具体说明如何实现。请添加一个好的选项来改进您的问题,该选项显示了您到目前为止的成绩,还有一个精确的解释,你想让代码做什么,而现在它没有做什么。有人能告诉我怎么做吗?该值应取自c程序例如0.567344,value1=0.567-->一个值,value2=34-->最高有效值,value3=4-->最低有效值您不能将运行标记的文本属性绑定到代码中的属性吗?您必须创建三个不同的属性,并将它们设置为要绑定到的主属性所需的值。
<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>
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();
    }
}