代码之家  ›  专栏  ›  技术社区  ›  Terence Lewis

当文本太大时,在WPF中用哈希替换数字

  •  0
  • Terence Lewis  · 技术社区  · 17 年前

    我正在寻找一种简单、惯用的方法来复制Excel的视觉提示,即数字太大,无法在列中显示。我有以下xaml:

    <ListView.View>
        <GridView>
            <GridViewColumn ... />
        </GridView>
    <ListView.View>
    

    我希望的是,如果列中的文本太小而无法显示(即,它被剪裁),我希望用“#”字符替换显示的数据。

    1 回复  |  直到 13 年前
        1
  •  2
  •   Tim Cooper    15 年前

    您可以将单元格的内容多重绑定到实际数量、包含列的宽度以及所需的单元格大小 TextBlock . 然后使用转换器转换并相应地选择内容。PSEDOU XAML:

    <GridViewColumn.CellTemplate>
        <DataTemplate>
            <TextBlock x:Name="_textBlock">
                <TextBlock.Content>
                    <MultiBinding Converter="{StaticResource MyConverter}">
                        <Binding Path="."/>
                        <Binding Path="ActualWidth" RelativeSource="{RelativeSource Ancestor, AncestorType={GridViewColumn}}"/>
                        <Binding Path="DesiredSize.Width" ElementName="_textBlock"/>
                    </MultiBinding>
                </TextBlock.Content>
            </TextBlock>
        </Datatemplate>
    </GridViewColumn.CellTemplate>
    

    PSEDOO代码:

    public class MyConverter : IMultiValueConverter
    {
        public object Convert(...)
        {
            object content = values[0];
            double actualWidth = (double)values[1];
            double desiredWidth = (double)values[2];
    
            if (desiredWidth > actualWidth)
            {
                return "######";
            }
    
            return content;
        }
    }
    

    除此之外,你可以自己写 控件 自动执行类似操作的子类,然后在每个列模板中使用该子类。