如何将数据模板分配给textbox wpf

如何将数据模板分配给textbox wpf,wpf,textbox,Wpf,Textbox,TextBox应该显示某些访问权限的隐藏美元金额。我创建了一个转换器类(继承自IValueConverter),通过实现convert方法来处理屏蔽 public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 如果需要屏蔽,则传递第三个参数true,否则传递false 这样称呼: CurrencyCOnverter converter

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();
<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>
我在UI上有大约12个文本框。我没有在12个地方这样做,而是在资源字典中定义了DataTemplates,如下所示:

CurrencyCOnverter converter = new CurrencyConverter();

this._textbox1.Text = converter.Convert(Amount, typeof(string), !this.IsSuperUser,
                          CurrentCulture).ToString();
<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分配数据模板一样,通过创建自定义textbox将此模板分配给textbox

谢谢


Megan。

您可以使用ContentControl显示数据模板。在本例中,我更喜欢的另一个想法是使用样式。下面的代码显示了两种方法都可以做

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


Wallstreet程序员,感谢您的回复。我已经有了一个带有标签和其他自定义控件模板和属性的自定义文本框。我将添加到该控件上,而不是替换textbox控件本身。请让我知道,如果你有任何关于如何使它与文本框控件工作的想法。谢谢。使用上面示例中的样式(MaskNormalBackgroundTbxStyle)将此触发器插入自定义文本框的样式中:不确定为什么,文本框中的文本从不被屏蔽。