6

के लिए काम नहीं कर रहा है मेरे पास एक प्रगति पट्टी है कि मैं एक बूलियन मान के आधार पर रंग बदलना चाहता हूं; सच हरा और झूठा लाल है। मेरे पास ऐसा कोड है जो ऐसा लगता है कि यह काम करना चाहिए (जब मैं इसे टेक्स्टबॉक्स में बांधता हूं तो यह सही मान देता है) लेकिन जब यह प्रगति पट्टी की रंग संपत्ति नहीं है। कनवर्टर इस के रूप में परिभाषित किया गया है (App.xaml.cs में के बाद से मैं कहीं भी इसे उपयोग करना चाहते हैं):IValueConverter SolidColorBrush

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; 
    } 
} 

मैं उसके बाद निम्न App.xaml करने के लिए (एक वैश्विक संसाधन तो यह हो सकता है) जोड़ें:

<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> 

मैं उन्हें प्रदर्शित करने के लिए MainPage.xaml के लिए निम्न कहा:

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

और फिर MainPage.xaml.cs में, मैं डेटा रखने और लिस्टबॉक्स करने के लिए इसे बाध्य करने के लिए एक वर्ग को परिभाषित:

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 संलग्न किया है, इसलिए इसे अभी बनाया और परीक्षण किया जा सकता है। उत्पादन की एक छवि यहाँ है:

enter image description here

यह पाठ बॉक्स के लिए कनवर्टर नहीं बल्कि प्रगति बार से मान देता है। जब मैं डीबगर चलाता हूं, तो यह इसे भी कॉल नहीं करता है।

किसी भी मदद के लिए धन्यवाद!

+0

यदि आपका कनवर्टर एक ठोस कॉलरब्रश लौटाता है, तो यह काम नहीं करेगा, और आप इसे सीधे अपने प्रोग्रेसबार की फोरग्राउंड प्रॉपर्टी से जोड़ सकते हैं? – BigL

+0

वाह - यह काम किया। मुझे अभी भी xaml का लटका मिल रहा है, इसलिए ऐसा कुछ नहीं है जिसकी मैंने कोशिश की थी। यदि आप इसे उत्तर के रूप में रखते हैं तो मैं इसे स्वीकार करूंगा। सलाह के लिये धन्यवाद! –

+0

@TaylorSouthwick इसे एक उत्तर के रूप में पोस्ट किया गया। मैं खुश हूं कि मैं मदद कर सका। :) – BigL

उत्तर

3

SolidColorBrush वापस करने के लिए अपने कनवर्टर को संशोधित करने का प्रयास करें और फिर सीधे अपने ProgressBars अग्रभूमि संपत्ति पर बाध्य करें।