Замена чисел хешами в WPF, когда текст слишком большой - PullRequest
0 голосов
/ 19 ноября 2008

Я ищу простой идиоматический метод репликации визуального сигнала Excel о том, что число слишком велико для отображения в столбце. У меня есть следующий xaml:

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

и я хотел бы, чтобы текст в столбце был слишком мал для отображения (т. Е. Обрезан), я хочу заменить отображаемые данные символами '#'.

1 Ответ

2 голосов
/ 19 ноября 2008

Вы можете связать содержимое ячейки с фактическим числом, шириной содержащего столбца и с желаемым размером TextBlock. Затем используйте конвертер, чтобы преобразовать, выберите содержание соответственно. Pseduo-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>

Pseduo-код:

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;
    }
}

Кроме этого, вы можете написать свой собственный подкласс TextBlock, который выполняет аналогичные действия автоматически, а затем использовать его внутри каждого шаблона столбца.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...