WPF TabItem Listbox动态绑定

时间:2016-03-21 16:49:56

标签: c# wpf binding

HY,

我想将颜色属性绑定到选项卡内容的背景:

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

QuickDialColl是QuickDial Objects的ObservableCollection:

    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>

动态绑定适用于以下按钮:

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

但我希望它适用于tab contentpresenter的背景(因为同一类别的所有按钮都具有相同的背景颜色)。

我尝试使用相同的代码绑定wrappanel和listbox bacground属性,但它不起作用。

以下是我想得到的结果:

Tab Content background

我肯定错过了这一点......

非常感谢你的帮助。 克里斯。

1 个答案:

答案 0 :(得分:0)

您的转换器应返回SolidColorBrush而不是颜色

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