根据组合框中的SelectedValue更改UserControl背景

时间:2010-02-05 20:50:01

标签: wpf binding combobox user-controls datatrigger

我尝试做什么:我在后台使用我的组合框有一个人物档案列表。触发器是根据人的性别(bool Role.IsFemale)更改背景。当我在代码中处理SelectionChangedEvent时,我可以看到Selectedvalue为true或false。我现在可以直接更改背景或更改usercontrol本身可以监听的dependencyProperty,并在触发时更改背景。但是,我尝试的只是使用xaml来实现这一点,但是当我使用下面的代码时没有任何反应......

<UserControl ...
MinHeight="100" MinWidth="100" x:Name="Crtl">
<UserControl.Resources>
    <SolidColorBrush x:Key="windowBGBrush1" Color="Green"/>
    <SolidColorBrush x:Key="windowBGBrush2" Color="Red"/>
</UserControl.Resources> 
<UserControl.Style >
    <Style TargetType="{x:Type Control}">
        <Style.Triggers>
            <DataTrigger Binding="{Binding Path=SelectedValue, ElementName=cbProfiles}" Value="False">
                <Setter Property="Background" Value="{DynamicResource windowBGBrush1}"/>
            </DataTrigger>
            <DataTrigger Binding="{Binding Path=SelectedValue, ElementName=cbProfiles}" Value="True">
            <Setter Property="Background" Value="{DynamicResource windowBGBrush2}"/>
            </DataTrigger>
        </Style.Triggers>
    </Style>
</UserControl.Style>
<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="20*"/>
        <RowDefinition Height="80*" />
    </Grid.RowDefinitions>
    <ComboBox Name="cbProfiles" Grid.Row="0" ItemsSource="{Binding}" DisplayMemberPath="Role.RoleID" SelectedValuePath="Role.IsFemale"/>
    <StackPanel Grid.Row="1" x:Name="spFileInfo" DataContext="{Binding ElementName=cbProfiles, Path=SelectedItem}">
        <TextBlock>Selected:</TextBlock>
        <TextBox x:Name="tbFileFolder" Width="Auto" Height="Auto" Text="{Binding Path=Role.RoleID}"/>
    </StackPanel>
</Grid>

1 个答案:

答案 0 :(得分:0)

我尝试了你的Xaml,它对我来说很好,当我更改组合框时,它会改变背景。也许你的数据绑定有问题。我使用了以下数据结构

class Role
{
    public int RoleID { get; set; }
    public bool IsFemale { get; set; }

    public Role() {}
}

class Person
{
    public Role Role { get; set; }

    public Person() {}
}