我有控制權,被別人使用。它有一個綁定到十進制值的TexBox。由於精度可以變化,我使用DependencyProperty和MultiBinding來指定它。 當文本框沒有聚焦時,數字應該以指定的精度顯示,但聚焦時應顯示完整數字。當TextBox聚焦或不聚焦時顯示不同的十進制精度的最佳方式?
實施例:
- 精度:2
- 用戶輸入:29.333
- 文本框不集中應該顯示:29.33
- 文本框集中應顯示:29.333
我已經完成這通過使用IMultibindingConverter和IsFocused屬性。但我不知道這是否是最好的方法。
我TexBox這樣定義
<UserControl.Resources>
<conv:ValuePrecisionConverter x:Key="ValuePrecisionConverter" />
</UserControl.Resources>
<TextBox x:Name="myTextBox">
<TextBox.Text>
<MultiBinding Converter="{StaticResource ValuePrecisionConverter}" Mode="TwoWay"
NotifyOnValidationError="true">
<Binding ElementName="parent" UpdateSourceTrigger="PropertyChanged" Path="Value" Mode="TwoWay" />
<Binding ElementName="parent" Path="Precision"/>
<Binding ElementName="parent" Path="AdditionalFormatting"/>
<Binding ElementName="myTextBox" Path="IsFocused" Mode="OneWay"/>
</MultiBinding>
</TextBox.Text>
</TextBox>
我ValuePrecisionConver的定義是這樣的:
public class ValuePrecisionConverter : IMultiValueConverter
{
public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
{
double? value = null;
converter = null;
value = System.Convert.ToDouble(values[0]);
precision = System.Convert.ToInt32(values[1]);
//Other code with 3rd parameter
if (values.Count() > 3)
{
bool isFocused = System.Convert.ToBoolean(values[3]);
if (isFocused)
return value.ToString();
}
/*Here I do the formating with the given precision*/
return formattedValue;
}
}
這是完成我需要最好的方法是什麼?可以使用這樣的IsFocused屬性嗎?
我值的格式有不同的精度,這取決於使用我的控制的人。此外,它可能會添加一些特殊的格式。我如何通過你的建議來完成這項工作? – Dzyann
您可以使用動態值綁定StringFormat:StringFormat = {Binding ...}或StringFormat = {StaticResource ...}。更多信息http://msdn.microsoft.com/es-es/library/system.string.format(v=vs.110).aspx – PakKkO
中的StringFormat刪除UpdateSourceTrigger以獲得良好的行爲! – PakKkO