6

Boolean değerine bağlı olarak rengi değiştirmek istediğim bir ilerleme çubuğu var; doğru yeşil ve yanlış kırmızıdır. Çalışması gerektiği gibi görünen bir kodum var (bunu bir metin kutusuna bağladığımda doğru değeri döndürür), ancak ilerleme çubuğunun renk özelliği değil.IValueConverter SolidColorBrush için çalışmıyor

public class ProgressBarConverter : System.Windows.Data.IValueConverter 
{ 
    public object Convert(
     object o, 
     Type type, 
     object parameter, 
     System.Globalization.CultureInfo culture) 
    { 
     if (o == null) 
      return null; 
     else 
      //return (bool)o ? new SolidColorBrush(Colors.Red) : 
      //     new SolidColorBrush(Colors.Green); 
      return (bool)o ? Colors.Red : Colors.Green; 
    } 

    public object ConvertBack(
     object o, 
     Type type, 
     object parameter, 
     System.Globalization.CultureInfo culture) 
    { 
     return null; 
    } 
} 

(global kaynak yüzden olabilir) Sonra App.xaml aşağıdakileri ekleyin: (Ben her yere erişmek istediğiniz beri App.xaml.cs olarak) dönüştürücü bu gibi tanımlanır

verileri tutmak ve liste kutusu bağlamak için bir sınıfını tanımlamak, MainPage.xaml.cs sonra

<Grid x:Name="LayoutRoot" Background="Transparent"> 
    <ListBox x:Name="listBox" 
      ItemTemplate="{StaticResource ItemTemplate}"/> 
</Grid> 

ve:

<Application.Resources> 
    <local:ProgressBarConverter x:Key="progressBarConverter" /> 
    <DataTemplate x:Key="ItemTemplate"> 
     <StackPanel> 
      <TextBlock Text="{Binding name}" Width="280" /> 
      <TextBlock Text="{Binding isNeeded, 
          Converter={StaticResource progressBarConverter}}" /> 
      <ProgressBar> 
       <ProgressBar.Foreground> 
        <SolidColorBrush Color="{Binding isNeeded, 
          Converter={StaticResource progressBarConverter}}" /> 
       </ProgressBar.Foreground> 
       <ProgressBar.Background> 
        <SolidColorBrush Color="{StaticResource PhoneBorderColor}"/> 
       </ProgressBar.Background> 
      </ProgressBar> 
     </StackPanel> 
    </DataTemplate> 
</Application.Resources> 

I görüntülemek için MainPage.xaml için aşağıdaki ilave

namespace PhoneApp1 
{ 
    public class TestClass 
    { 
     public bool isNeeded { get; set; } 
     public string name { get; set; } 
    } 

    public partial class MainPage : PhoneApplicationPage 
    { 
     // Constructor 
     public MainPage() 
     { 
      InitializeComponent(); 

      var list = new LinkedList<TestClass>(); 
      list.AddFirst(
           new TestClass { 
            isNeeded = true, name = "should be green" }); 
      list.AddFirst(
           new TestClass { 
            isNeeded = false, name = "should be red" }); 
      listBox.ItemsSource = list; 
     } 
    } 
} 

minimal working example ekledim, böylece yalnızca oluşturulabilir ve test edilebilir. çıktının bir görüntü buradadır:

enter image description here

Bu metin kutusu için dönüştürücü ancak ilerleme çubuğu değerleri döndürür. Hata ayıklayıcısını çalıştırdığımda, buna çağrı bile yapmıyor.

Yardımlarınız için teşekkürler!

+0

Dönüştürücünüz bir solidColorBrush döndürürse ve bunu doğrudan ProgressBar'ınızın ForeGround Özelliği'ne bağlarsanız işe yaramaz mı? – BigL

+0

Vay - bu işe yaradı. Hala xaml'ın asılmasını alıyorum, o yüzden denediğim bir şey değil. Bunu bir cevap olarak kabul ederseniz kabul edeceğim. Önerin için teşekkürler! –

+0

@TaylorSouthwick Bir cevap olarak yayınladı. Yardım edebileceğime sevindim. :) – BigL

cevap

3

Dönüştürücünüzü değiştirerek SolidColorBrush numaralı telefona dönün ve daha sonra doğrudan ProgressBars Foreground özelliğinize bağlanın.