我有下面的代碼顯示客戶的年齡。WPF在TextBox混合綁紮固定文本
<TextBox x:Name="txtClientAge" Text="{Binding Path=ClientAge}" />
然而,而不只是顯示只是數字,我想用文字「時代」前綴,並用文字「年」後綴,以便它有效地成爲「年齡36歲」
我可以用一個水平的StackPanel和3個文本框實現這一點,但是有沒有更簡單的方法,我錯過了?
我有下面的代碼顯示客戶的年齡。WPF在TextBox混合綁紮固定文本
<TextBox x:Name="txtClientAge" Text="{Binding Path=ClientAge}" />
然而,而不只是顯示只是數字,我想用文字「時代」前綴,並用文字「年」後綴,以便它有效地成爲「年齡36歲」
我可以用一個水平的StackPanel和3個文本框實現這一點,但是有沒有更簡單的方法,我錯過了?
假設你不需要年齡值可編輯,在WPF 4.0運行的Text屬性會綁定,這可能不利於你現在除非你使用的是預發佈,但你會能夠做到像下面這樣:
<TextBlock x:Name="txtClientAge" >
<Run Text="Age "/><Run Text="{Binding Path=ClientAge}"/><Run Text=" Yrs"/>
</TextBlock>
UPDATE繼承人另一替換格式字符串的解決方案,將工作,但不是特別漂亮(其實它很哈克)。使用上結合下述轉換器(假設委託關係屬性的類型爲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", ""));
}
}
你可以創建你也結合了類的屬性創建你想顯示的文本字符串。
另外還有的StringFormat路線:
<textblock text="{Binding Path=mydate, StringFormat=d}"/>
你能砍常數爲格式化字符串。
我喜歡的屬性方法。
這是一個很老的問題,但我認爲這是目前最好的解決辦法(如果你要編輯的文本)。
您可以使用InlineUIContainer
在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>
是的,我意識到原來的提問者最終希望'年齡'是隻讀的 - 但這是對問題的回答,如問:-) – 2011-10-06 04:57:20
這就像以前的答案 - (但他們都與Texblocks ......所以這裏一個文本框的版本),我也想展示Multibinding方法。爲了得到一個Texbox做你想要什麼,你可以使用下面的代碼:
<TextBox>
<TextBox.Text>
<MultiBinding StringFormat="Age {0} yrs and {1} months">
<Binding Path="Years" />
<Binding Path="Months" />
</MultiBinding>
</TextBox.Text>
</TextBox>
,如果你想使你的文字進行選擇,這樣用戶可以將代碼複製它可能是有用的。
你想要「年齡」和「年」部分是可編輯的嗎?即是否允許用戶將「年齡40歲」(或者也可能只是「40」)全部輸入到文本框中,並正確解析它? – 2009-09-15 22:00:51
在任何情況下,如果你只在你的應用程序中的單個這樣的文本框(即沒有必要爲它可重用),該StackPanel中+ 2周+的TextBlocks文本框的解決方案將是最簡單的。 – 2009-09-15 22:03:22
它只是作爲只讀使用,不需要更新。 – Mitch 2009-09-15 23:08:20