2016-03-21 1 views
0

Hy,WPF TabItem Listbox dynamische Bindung

Ich möchte eine Farbeigenschaft auf dem Hintergrund einer Registerkarte Inhalt binden:

<CollectionViewSource x:Key="MyCollectionViewSource" Source="{Binding QuickDialColl, Source={x:Static vm:QuickDialViewModel.Instance}}"> 
     <CollectionViewSource.GroupDescriptions> 
      <PropertyGroupDescription PropertyName="Category" /> 
     </CollectionViewSource.GroupDescriptions> 
    </CollectionViewSource> 

Die QuickDialColl ist ein ObservableCollection von QuickDial Objekte:

class QuickDial 
{ 
    public string Name { get; set; } 
    public string ToolTip { get; set; } 
    public string Number { get; set; } 
    public string Category { get; set; } 
    public string CustomBackgroundColor { get; set; } 
    public string TextColor { get; set; } 

    public QuickDial() 
    { 
    } 
} 

<TabControl ItemsSource="{Binding Groups, Source={StaticResource MyCollectionViewSource}}" SelectedIndex="0" > 

    <TabControl.ItemTemplate> 
     <DataTemplate> 
      <TextBlock Text="{Binding Name}"/> 
     </DataTemplate> 
    </TabControl.ItemTemplate> 

    <TabControl.ContentTemplate> 
     <DataTemplate> 
      <ListBox ItemsSource="{Binding Items}" 
       IsManipulationEnabled="False" 
       ScrollViewer.HorizontalScrollBarVisibility="Disabled" 
       HorizontalContentAlignment="Stretch" 
       VerticalContentAlignment="Stretch"> 

       <ListBox.ItemsPanel> 
        <ItemsPanelTemplate> 
         <WrapPanel /> 
        </ItemsPanelTemplate> 
       </ListBox.ItemsPanel> 

       <ListBox.ItemTemplate> 
        <DataTemplate> 
         <Button Content="{Binding Name}" 
          Background="{Binding CustomBackgroundColor,Converter={StaticResource HexToColorConverter}}" 
          ToolTip="{Binding ToolTip}" 
          Width="130" 
          Margin="2,2,2,2" 
          /> 

        </DataTemplate> 
       </ListBox.ItemTemplate> 
      </ListBox> 
     </DataTemplate> 
    </TabControl.ContentTemplate> 

</TabControl> 

Die dynamische Bindung für die Tasten mit ok ist:

Background="{Binding CustomBackgroundColor,Converter={StaticResource HexToColorConverter}}" 

Aber ich wünsche es für den Hintergrund der Registerkarte Content arbeitet (wie alle Tasten der gleichen Kategorie das gleiche haben Hintergrundfarbe).

Ich habe versucht, die Wrappanel und die Listbox Bacground Eigenschaft mit dem gleichen Stück Code zu binden, aber es hat nicht funktioniert. Hier

ist das Ergebnis Ich mag würde bekommen:

Tab Content background

ich sicher bin fehlt der Punkt ...

Vielen Dank für Sie Hilfe. Chris.

Antwort

0

Ihr Konverter sollte eine SolidColorBrush statt Farbe zurückgeben

public class HexToColorConverter : IValueConverter 
    { 
     public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
     { 
      return new SolidColorBrush(Colors.Blue); 
     } 

     public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) 
     { 
      throw new NotImplementedException(); 
     } 
    }