Mit*_*tch 7 .net wpf binding text textbox
我有以下代码来显示客户年龄.
<TextBox x:Name="txtClientAge" Text="{Binding Path=ClientAge}" />
Run Code Online (Sandbox Code Playgroud)
然而,我不是只显示数字,而是用文本"Age"作为前缀,并以文本"yrs"为后缀,因此它实际上变为"年龄36岁"
我可以使用水平StackPanel和3个文本框来实现这一点,但是有一个更简单的方法,我错过了吗?
假设您不需要年龄值可编辑,在WPF 4.0中,Run的Text属性将是可绑定的,这可能对您现在没有帮助,除非您使用预发布但是您将能够执行某些操作如下:
<TextBlock x:Name="txtClientAge" >
<Run Text="Age "/><Run Text="{Binding Path=ClientAge}"/><Run Text=" Yrs"/>
</TextBlock>
Run Code Online (Sandbox Code Playgroud)
UPDATE Heres是格式字符串解决方案的另一种替代方案,它可以工作但不是特别漂亮(事实上它非常hacky).在绑定上使用以下转换器(假设ClientAge属性的类型为int):
public class AgeConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter,
System.Globalization.CultureInfo culture)
{
string age = value.ToString();
return "Age " + age + " years";
}
public object ConvertBack(object value, Type targetType, object parameter,
System.Globalization.CultureInfo culture)
{
string age = value as string;
return Int32.Parse(age.Replace("Age ", " ").Replace(" years", ""));
}
}
Run Code Online (Sandbox Code Playgroud)
您可以在绑定的类中创建一个属性,以创建您想要显示的文本字符串.
还有StringFormat路线:
<textblock text="{Binding Path=mydate, StringFormat=d}"/>
Run Code Online (Sandbox Code Playgroud)
您可以将常量破解为格式化字符串.
我更喜欢属性方法.
这是一个很老的问题,但我认为这是目前最好的解决方案(如果你想编辑文本).
您可以使用嵌套InlineUIContainer
中的a TextBlock
来实现Textbox
.
注意:我习惯于BaselineAlignment="Center"
对齐组件.您还可以TextBox
根据需要添加正或负边距.此外,我设置TextBox
透明的边框,使其看起来像是一部分,TextBlock
即使它是可编辑和可选择的.
<TextBlock Foreground="SteelBlue">
<Run Text="Package Barcode:" FontWeight="Bold" BaselineAlignment="Center"/>
<InlineUIContainer BaselineAlignment="Center">
<TextBox Margin="2,0,0,0" Foreground="Gray" Text="{Binding BarcodeNumber}" BorderThickness="0" Padding="0"/>
</InlineUIContainer>
</TextBlock>
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
4949 次 |
最近记录: |