创建一个WPF自定义组合框

时间:2016-10-04 14:41:49

标签: c# wpf combobox

我要做的是一个组合框,顶部有最喜欢的值,背景颜色和按钮不同。现在我有:

<UserControl x:Class="ComboBoxWithButton"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             mc:Ignorable="d"
             Name="root"
             d:DesignWidth="300" Height="25">

    <ComboBox 
         x:Name="ComboBoxBtn" 
         VerticalAlignment="Top" 
         HorizontalAlignment="Left" 
         Margin="0,0,0,-1" 
         Width="300" 
         ItemsSource="{Binding Source, RelativeSource={RelativeSource AncestorType=UserControl}}"
         SelectedItem="{Binding Path=Selected, Mode=TwoWay, RelativeSource={RelativeSource AncestorType=UserControl}}">
       <ComboBox.Resources>
            <Style TargetType="ComboBoxItem">
                ????
            </Style>
        </ComboBox.Resources>
        <ComboBox.ItemTemplate>
            <DataTemplate>
                <Grid>
                    <Grid.Style>
                        <Style TargetType="Grid">
                            <Setter Property="Background" Value="#FFE6E6FA"/>
                        </Style>
                    </Grid.Style>
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="Auto" />
                        <ColumnDefinition Width="Auto" />
                    </Grid.ColumnDefinitions>
                    <Label Content="{Binding}" Width="250" />
                    <Button Grid.Column="1" Command="{Binding CommandButton, ElementName=root}"
                            CommandParameter="{Binding}">+</Button>
                </Grid>
            </DataTemplate>

        </ComboBox.ItemTemplate>
    </ComboBox>
</UserControl>

现在我有一个添加按钮,所以我可以将我的项目添加为收藏夹。但我现在想要的是,基于我代表它作为最喜欢的项目。

案例是最喜欢的具有不同背景颜色和[ - ]按钮(要删除)。情况不是背景像往常一样是白色并且有[+]。

1 个答案:

答案 0 :(得分:1)

查看ContentControl是否可以帮助您取代使用Button的位置。

 <ComboBox.ItemTemplate>
 <DataTemplate>
 <ContentControl>
    <Style TargetType="ContentControl">
        <Style.Triggers>
            <DataTrigger Binding="{Binding ...}" Value="True">
                <Setter Property="Content">
                    <Setter.Value>
                            <Grid>
                                <Grid.Style>
                                    <Style TargetType="Grid">
                                        <Setter Property="Background" Value="#FFE6E6FA"/>
                                    </Style>
                                </Grid.Style>
                                <Grid.ColumnDefinitions>
                                    <ColumnDefinition Width="Auto" />
                                    <ColumnDefinition Width="Auto" />
                                </Grid.ColumnDefinitions>
                                <Label Content="{Binding}" Width="250" />
                                <Button Grid.Column="1" Command="{Binding CommandButton, ElementName=root}"
                        CommandParameter="{Binding}">+</Button>
                            </Grid>
                        </Setter.Value>
                </Setter>
            </DataTrigger>
            <DataTrigger Binding="{Binding ...}" Value="False">
                <Setter Property="Content">
                    <Setter.Value>
                            <Grid>
                                <Grid.Style>
                                    <Style TargetType="Grid">
                                        <Setter Property="Background" Value="Yellow"/>
                                    </Style>
                                </Grid.Style>
                                <Grid.ColumnDefinitions>
                                    <ColumnDefinition Width="Auto" />
                                    <ColumnDefinition Width="Auto" />
                                </Grid.ColumnDefinitions>
                                <Label Content="{Binding}" Width="250" />
                                <Button Grid.Column="1" Command="{Binding CommandButton, ElementName=root}"
                                    CommandParameter="{Binding}">-</Button>
                            </Grid>
                        </Setter.Value>
                </Setter>
            </DataTrigger>
        </Style.Triggers>
    </Style>
</ContentControl>
</DataTemplate>
</ComboBox.ItemTemplate>