如何使用绑定

时间:2016-01-19 05:24:54

标签: c# wpf xaml

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

http://i.stack.imgur.com/NZIBP.png

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

i.stack.imgur.com/AGQqX.png

这是我的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>'

2 个答案:

答案 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();
    }
}