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();
我在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分配数据模板一样?
谢谢,
梅根。
答案 0 :(得分:2)
您可以使用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>