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