簡體   English   中英

StringFormat凍結UI

[英]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.UnsetValueBinding.DoNothing數組。
  • 不要命名您的轉換器Binding -可能會引起歧義

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM