2011-01-14 1 views
0

Ich möchte einen geparsten Int-Wert von Silverlight-Schieberegler zu Checkboxen zu lesen.Setzen Sie Checkboxen von einem int-Wert in C# (für silverlight)

Zum Beispiel hat der Slider den Wert 7, ich drücke eine Taste und mache 7 Checkboxen.

Wie mache ich das?

+0

Bitte beachten Sie das Windows Phone 7 basiert auf Silverlight 3 (nicht 4). Ich habe Ihre Frage (und Tags) entsprechend aktualisiert. –

Antwort

0

Hier ist ein funktionierendes Beispiel. Es erinnert sich sogar an den aktivierten Status von Boxen, wenn mehr hinzugefügt werden.

Unter der Annahme dieses XAML:

<Slider Minimum="0" Maximum="7" SmallChange="1" LargeChange="1" 
     x:Name="mySlider" ValueChanged="mySlider_ValueChanged" /> 

<StackPanel x:Name="chkContainer" /> 

Dies ist der Event-Handler

private void mySlider_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e) 
{ 
    if (chkContainer != null) // It could be null during page creation (add event handler after construction to avoid this) 
    { 
     // The following works because the both the small and large change are one 
     // If they were larger you may have to add (or remove) more at a time 
     if (chkContainer.Children.Count() < mySlider.Value) 
     { 
      chkContainer.Children.Add(new CheckBox { Content = mySlider.Value.ToString() }); 
     } 
     else 
     { 
      chkContainer.Children.RemoveAt(int.Parse(mySlider.Value.ToString())); 
     } 
    } 
} 
+0

Matt Regeln ..: p –

0

Ein Kontrollkästchen kann instanziiert und einer Standardprojektseite mit dem folgenden Code hinzugefügt werden.

 var cb = new CheckBox(); 
     ContentPanel.Children.Add(cb); 
1

Wenn Sie ihre Werte in einem Viewmodel erfassen müssen, Hinzufügen des Kontrollkästchen in der Code-behind nicht sein kann bester Ansatz.

class MainWindowViewModel : INotifyPropertyChanged 
{ 
    private int _sliderValue; 
    public int SliderValue 
    { 
     get 
     { 
      return _sliderValue; 
     } 
     set 
     { 
      _sliderValue = value; 

      while (SliderValue > CheckboxValues.Count) 
      { 
       CheckboxValues.Add(false); 
      } 

      // remove bools from the CheckboxValues while SliderValue < CheckboxValues.Count 
      // ... 
     } 
    } 


    private ObservableCollection<Boolean> _checkboxValues = new ObservableCollection<Boolean>(); 
    public ObservableCollection<Boolean> CheckboxValues 
    { 
     get 
     { 
      return _checkboxValues; 
     } 
     set 
     { 
      if (_checkboxValues != value) 
      { 
       _checkboxValues = value; 
       RaisePropertyChanged("CheckboxValues"); 
      } 
     } 
    } 

dann in XAML, so etwas wie:

<ItemsControl ItemsSource="{Binding CheckboxValues}"> 
     <ItemsControl.ItemTemplate> 
      <DataTemplate DataType="{x:Type sys:Boolean}"> 
       <CheckBox IsChecked="{Binding self}">Hello World</CheckBox> 
      </DataTemplate> 
     </ItemsControl.ItemTemplate> 
    </ItemsControl>