Как назначить табличку с данными для текстового поля wpf - PullRequest
2 голосов
/ 02 июля 2010

TextBox должен отображать замаскированную сумму в долларах для определенных привилегий доступа.Я создал класс конвертера (унаследованный от IValueConverter) для обработки маскирования путем реализации метода convert.

public object Convert(object value, Type targetType, object parameter, 
                  CultureInfo culture)

Третий параметр передается true, если требуется маскирование, иначе false.

Вызывается так:

CurrencyCOnverter converter = new CurrencyConverter();

this._textbox1.Text = converter.Convert(Amount, typeof(string), !this.IsSuperUser,
                          CurrentCulture).ToString();

У меня около 12 текстовых полей в пользовательском интерфейсе.Вместо того, чтобы делать это в 12 местах, я определил DataTemplates в словаре ресурсов, который выглядит следующим образом:

<DataTemplate x:Key="MaskNormalBackgroundTbx">

 <TextBlock TextAlignment="Right" VerticalAlignment="Center"
            TextWrapping="WrapWithOverflow" 
            Text="{Binding "Amount" 
                   Converter={StaticResource CurrencyDisplayConverter}, 
                   ConverterParameter=true}" />    
</DataTemplate>

 <DataTemplate x:Key="NoMaskNormalBackgroundTbx">

 <TextBlock TextAlignment="Right" VerticalAlignment="Center" 
            TextWrapping="WrapWithOverflow" 
            Text="{Binding "Amount" 
                   Converter={StaticResource CurrencyDisplayConverter}, 
                   ConverterParameter=false}" />    
 </DataTemplate>

Мой вопрос: есть ли способ, которым я могу назначить этот шаблон для текстового поля, создав пользовательское текстовое поле так же, как мыназначить шаблоны данных для ListBox?

Спасибо,

Меган.

1 Ответ

2 голосов
/ 02 июля 2010

Вы можете использовать ContentControl для отображения вашего DataTemplate.Еще одна идея, которую я предпочитаю в этом случае, это использовать стили.Ниже код показывает горячее, чтобы сделать оба.

<Window x:Class="Test.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:Test="clr-namespace:Test"
    Height="300" Width="300">

    <Window.Resources>

        <Test:CurrencyDisplayConverter x:Key="CurrencyDisplayConverter" />

        <DataTemplate x:Key="MaskNormalBackgroundTbxDT">
            <TextBlock TextAlignment="Right" VerticalAlignment="Center" 
            TextWrapping="WrapWithOverflow"  
            Text="{Binding Converter={StaticResource CurrencyDisplayConverter}, ConverterParameter=true}" />
        </DataTemplate>

        <Style x:Key="MaskNormalBackgroundTbxStyle" TargetType="TextBlock">
            <Setter Property="TextAlignment" Value="Right" />
            <Setter Property="VerticalAlignment" Value="Center" />
            <Setter Property="TextWrapping" Value="WrapWithOverflow" />
            <Setter Property="Text" Value="{Binding Path=Amount, Converter={StaticResource CurrencyDisplayConverter}, ConverterParameter=true}" />
        </Style>

    </Window.Resources>
    <StackPanel>

        <ContentControl
            Content="{Binding Path=Amount}" 
            ContentTemplate="{StaticResource MaskNormalBackgroundTbxDT}" />

        <TextBlock 
            Style="{StaticResource MaskNormalBackgroundTbxStyle}" />

    </StackPanel>

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