【问题标题】:How to select fourth decimal digit dynamically using binding [closed]如何使用绑定动态选择第四位小数[关闭]
【发布时间】:2016-01-19 05:24:54
【问题描述】:

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

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

这是我的 xaml 代码“check at 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>'

【问题讨论】:

  • 听起来你需要一个自定义绑定,我不相信你可以使用 WPF 的内置数据绑定语法来做到这一点。
  • 感谢您的回复,我不知道如何使用自定义绑定。你能帮我或给我一些例子吗?这会更有帮助。
  • 嗯,他们对此有什么确切的解决方案吗?怎么办?
  • 很遗憾,您的问题根本不清楚。首先这个数字到底在哪里?它应该在模型数据结构中;鉴于此,约束与这个问题有什么关系?为什么不直接从模型中提取数字?选择第四位数字与您还描述的格式问题有何关系?您可能需要使用RichTextBox 或类似名称来完成后者,但如果没有更多详细信息,则无法具体说明如何。
  • 请通过添加一个很好的minimal reproducible example 来改进您的问题,该minimal reproducible example 显示了您到目前为止所拥有的内容,并准确解释了您希望该代码做什么而它现在没有做什么。

标签: c# wpf xaml


【解决方案1】:

您可以使用转换器来格式化值,或者像 @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();
    }
}

【讨论】:

    【解决方案2】:
    ' <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 文件?

    【讨论】:

    • 请任何人建议我怎么做?该值应取自 c# 程序
    • 例如0.567344,value1= 0.567--->一个值,value2= 34----->最重要的值,value3= 4--->最不重要的值
    • 您不能将 Run 标签的 Text 属性绑定到代码中的某个属性吗?您必须创建三个不同的属性,并将它们设置为您想要绑定到的主属性所需的值。
    猜你喜欢
    • 2021-12-25
    • 2016-05-02
    • 2014-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-07
    • 2021-06-01
    相关资源
    最近更新 更多