如何将数据模板分配给文本框wpf

问题描述:

TextBox应该为某些访问权限显示蒙版金额。我创建了一个转换器类(继承自IValueConverter)以通过实现convert方法来处理掩码。如何将数据模板分配给文本框wpf

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

如果需要屏蔽,则传递第三个参数否则返回false。

这样调用:

CurrencyCOnverter converter = new CurrencyConverter(); 

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

我对UI约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的模板?

谢谢,

梅根。

您可以使用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> 
+0

Wallstreet程序员, 感谢您的回应。我已经有了一个带有标签和其他自定义控件模板和属性的自定义文本框。我会添加到,而不是替换文本框控件本身。请让我知道,如果你有任何想法如何使它与文本框控件一起工作。 谢谢。 – user296623 2010-07-07 14:55:52

+0

使用样式,然后像上面的示例(MaskNormalBackgroundTbxStyle) – 2010-07-07 15:05:45

+0

在自定义文本框样式中插入此触发器: 不确定为什么,文本框中的文本永远不会被屏蔽。 – user296623 2010-07-08 15:18:05