我正在尝试根据分配给ComboBox ItemSource的属性值来更改ComboBoxItem的值。
我知道在WPF中它可以实现如下:
<ComboBox.ItemContainerStyle>
<Style TargetType="{x:Type ComboBoxItem}">
<Setter Property="Background" Value="#FFD2D2" />
<Style.Triggers>
<DataTrigger Binding="{Binding IsValid}" Value="True">
<Setter Property="Background" Value="Green" />
</DataTrigger>
</Style.Triggers>
</Style>
</ComboBox.ItemContainerStyle>
在UWP中,我尝试使用行为,但仍然不起作用。
<ComboBox.ItemContainerStyle>
<Style TargetType="ComboBoxItem">
<Setter Property="Background" Value="Transparent" />
<interactivity:Interaction.Behaviors>
<core:DataTriggerBehavior Binding="{Binding IsValid}" Value="True">
<core:ChangePropertyAction PropertyName="Background" Value="{ThemeResource MyBorderBrush}" />
</core:DataTriggerBehavior>
</interactivity:Interaction.Behaviors>
</Style>
</ComboBox.ItemContainerStyle>
我也尝试使用VSM,但不确定如何应用条件值。
<Style TargetType="ComboBoxItem">
<Setter Property="Background" Value="Transparent" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="ComboBoxItem">
<Grid x:Name="LayoutRoot" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}">
<VisualStateManager.VisualStateGroups>
<VisualStateGroup x:Name="CommonStates">
<VisualState x:Name="Normal">
<Storyboard>
// What should go here?
</Storyboard>
</VisualState>
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
编辑:
我更喜欢设置ComboBoxItem本身的背景的解决方案,而不是创建单独的网格/边框,然后使用转换器作为背景。
发布于 2018-09-28 15:02:13
据我所知,UWP xaml在风格上不支持这样的触发器。通常,我们在控件的根子节点上使用行为数据触发器。如果您不想使用数据绑定作为@touseefbsb的答案,但又想根据您的数据模型更改ComboboxItem
样式,我认为您可以尝试操作组合框的Itemtemplate,并在其中使用行为数据触发器。
<ComboBox Width="300" Height="60" Name="MyComBoBox" ItemsSource="{Binding models}">
<ComboBox.ItemTemplate>
<DataTemplate>
<Grid Name="MyGrid">
<TextBlock Text="{Binding Name}"></TextBlock>
<interactivity:Interaction.Behaviors>
<core:DataTriggerBehavior Binding="{Binding IsValid}" ComparisonCondition="Equal" Value="true">
<core:ChangePropertyAction PropertyName="Background" TargetObject="{Binding ElementName=MyGrid}"
Value="{StaticResource MyColor}" />
</core:DataTriggerBehavior>
</interactivity:Interaction.Behaviors>
</Grid>
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
发布于 2018-09-27 06:59:54
这就是如何将集合绑定到uwp中的ComboBox,并使用集合项目的属性值设置每个项目的背景。
XAML
<ComboBox
x:Name="ComboBox1"
ItemsSource="{x:Bind Books}"
Header="Select A Book">
<ComboBox.ItemTemplate>
<DataTemplate x:DataType="models:Book">
<StackPanel
Background="{x:Bind MyBackground}"
Padding="8">
<TextBlock
Text="{x:Bind Title}"/>
</StackPanel>
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
C#
ObservableCollection<Book> Books = new ObservableCollection<Book>();
public MainPage()
{
this.InitializeComponent();
Books.Add(new Book("Book1",new SolidColorBrush(Colors.Red)));
Books.Add(new Book("Book2",new SolidColorBrush(Colors.Green)));
Books.Add(new Book("Book3",new SolidColorBrush(Colors.Blue)));
}
Models.Book
public class Book
{
public string Title {get; set;}
public SolidColorBrush MyBackground{get; set;}
public Book(string title,SolidColorBrush myBackground)
{
Title = title;
MyBackground = myBackground;
}
}
因此,基本上你只需要绑定Stackpanel的background属性,在这个属性中你包装了ComboBoxItem的内容,你甚至可以将你的内容包装在网格或边框中,以及你喜欢的任何东西。
https://stackoverflow.com/questions/52527057
复制相似问题