2016-05-12 6 views
1

Ich habe stackpanel, zu denen ich RadioButtons dynamisch als Kinder hinzufügen. Radiobuttons Inhalt haben, die ganze Zahl ist.WPF Bindung erstellt dynamisch RadioButtons aus Code

Ich habe auch Y x Y Grid (Größe bestimmt aus Code dynamisch), zu denen ich dynamisch hinzufügen Buttons und erlauben Benutzer, Button Inhalt in Zeichenfolge, die ganze Zahl darstellt zu ändern.

Hier ist, wo ich Hilfe brauche:

Nach beliebiger Radiobutton von Stackpanel Überprüfung, würde ich alle Tasten von Raster wie die gleiche Anzahl haben ihre Hintergrundfarbe geändert haben.

Da ich neu bei WPF bin, bin ich nicht sicher, wie dies zu erreichen ist und Ihre Hilfe würde sehr geschätzt werden.

EDIT: hier ich ein wenig Fortschritte gemacht, was ich tue, ist im Grunde binden Button.Content mit RadioButton.IsChecked und RadioButton.Content für everybutton und jeder Radiobutton, aber ich habe Problem, dass es funktioniert nur für letzte RadioButton- ist Code (rbuts = Eltern die Kontrolle über Radiobuttons, MyGrid = Eltern die Kontrolle über Tasten):

for (int z = 0; z < boardSize * boardSize; z++) 
     { 

      Button b1 = MyGrid.Children[z] as Button; 
      for (int i = 0; i < boardSize; i++) 
      { 
       MultiBinding rbtnBinding = new MultiBinding(); 
       rbtnBinding.Converter = new RadioButtonHighlightConverter(); 
       rbtnBinding.Bindings.Add(new Binding("IsChecked") { Source = rbuts.Children[i] }); 
       rbtnBinding.Bindings.Add(new Binding("Content") { Source = rbuts.Children[i] }); 
       rbtnBinding.Bindings.Add(new Binding("Content") { Source = MyGrid.Children[z] }); 
       rbtnBinding.NotifyOnSourceUpdated = true; 
       b1.SetBinding(Button.BackgroundProperty, rbtnBinding); 

      } 

     } 

Sein, als ob ich nicht viele verschiedene multibindings für gleiche Taste ...

+0

Die Antwort von [ein Stil-Auswahl für eine Schaltfläche verwenden] (http://stackoverflow.com/questions/5082509/use-a -StyleSelector-for-a-Button) würde wahrscheinlich Ihr Problem lösen. –

Antwort

0

Sie könnten Ihren Knopf Styles setzen einstellen in einem Resource Dictionary und binden th e Stil für das Button und einen Konverter

ButtonStyles.xaml

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> 
    <Style x:Key="ButtonStyle1" TargetType="Button"> 
     <Setter Property="Background" Value="Green"/> 
     <Setter Property="FontSize" Value="12"/> 
    </Style> 
    <Style x:Key="ButtonStyle2" TargetType="Button"> 
     <Setter Property="Background" Value="Red"/> 
     <Setter Property="FontSize" Value="14"/> 
    </Style> 
</ResourceDictionary> 

Dann gilt für die Schaltfläche, die diese Anforderung Sie Stil auf die Eigenschaft von Interesse binden

<Button ... 
     Style="{Binding Path=MyDataProperty, 
         Converter={StaticResource ButtonStyleConverter}}"/> 

Und in Der Konverter lädt das ButtonStyles Resource Dictionary und gibt den gewünschten Style basierend auf dem Wert

public class ButtonStyleConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     Uri resourceLocater = new Uri("/YourNameSpace;component/ButtonStyles.xaml", System.UriKind.Relative); 
     ResourceDictionary resourceDictionary = (ResourceDictionary)Application.LoadComponent(resourceLocater); 
     if (value.ToString() == "Some Value") 
     { 
      return resourceDictionary["ButtonStyle1"] as Style; 
     } 
     return resourceDictionary["ButtonStyle2"] as Style; 
    } 
    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     throw new NotImplementedException(); 
    } 
} 
01 zurück

EDIT:

Added Details für Konverter Parameter

<RadioButton Content="None" 
      xmlns:sys="clr-namespace:System;assembly=mscorlib"> 
    <RadioButton.IsChecked> 
     <Binding Path="MyProperty" 
       Converter="{StaticResource IntToBoolConverter}"> 
      <Binding.ConverterParameter> 
       <sys:Int32>0</sys:Int32> 
      </Binding.ConverterParameter> 
     </Binding> 
    </RadioButton.IsChecked> 
</RadioButton> 
+0

ok, aber für RadioButton muss es in Converter überprüft werden, wenn es IsChecked ist, aber auch überprüfen, ob es Inhalt der Schaltflächen mit der gleichen Zahl zu ändern, so weiß ich, ich kann Bool übergeben als Wert, der IsChecked angibt, aber wie gehe ich den Inhalt von RadioButton entlang dieses Bool an Converter übergeben? – HackTheGibson

+0

Ich habe etwas mehr Code hinzugefügt, der zeigt, wie ein ganzzahliger Wert als Konverterparameter an den Konverter übergeben wird. Sie könnten auch eine Zeichenfolge übergeben. Überprüfen Sie den Code und kehren Sie bei Zweifeln zurück. – ViVi

+0

Ich habe meine Frage mit meinem Teilfortschritt bearbeitet, obwohl ich nicht verstehe, warum es nur für den letzten Radiobutton funktioniert:/ – HackTheGibson