[英]StringFormat freezes UI
我正在制作一個帶有TextBlock的ProgressBar,以通知用戶有關下載的信息,我需要將TextBlock綁定到ProgressBar的值並通過XAML進行格式化。
像這樣:
<TextBlock x:Name="TxtBlock_Download" Grid.Row="5" Grid.Column="1" Grid.ColumnSpan="3"
TextAlignment="Center"
Foreground="White" Padding="0,2,0,0">
<!--Updates the textbox by using multibinding-->
<TextBlock.Text>
<!--TODO fix the StringFormat -->
<MultiBinding Converter="{StaticResource ResourceKey=kk}" StringFormat="{}{}">
<Binding ElementName="ProgressBar_Download" Path="Value"/>
<Binding ElementName="ProgressBar_Download" Path="Maximum"/>
</MultiBinding>
</TextBlock.Text>
</TextBlock>
我也在使用單獨的類來連接兩個值和最大值
像這樣:
class Binding : IMultiValueConverter
{
public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
{
return values[0] + "/" + values[1].ToString();
}
public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
{
return (value as string).Split('/');
}
}
但是每次我嘗試使用StringFormat=""
格式化字符串時,它都會凍結UI,直到下載完成(下載仍在后台運行,但程序被凍結)。
由於您無法格式化已經轉換為字符串的數字,因此我建議您僅重寫轉換器(因為您已經擁有一個轉換器)來處理所需的所有格式:
class MyAwesomeProgressConverter : IMultiValueConverter
{
public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
{
return ((double)values[0]).ToString("f2") + "/" + ((double)values[1]).ToString("f2");
}
public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
{
Enumerable.Repeat(DependencyProperty.UnsetValue, targetTypes.Length).ToArray()
}
}
也:
ConvertBack
。 拋出異常或返回DependencyProperty.UnsetValue
或Binding.DoNothing
數組。 Binding
-可能會引起歧義
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.