ComboBox 数据绑定到 window 后台

ComboBox databinding to window background

这里的 WPFc# 很新。我有兴趣拥有一个具有不同颜色选项的ComboBox,这些选项会在选择选项时更新window's Background

我想通过 DataBinding 执行此操作,但我是菜鸟,做不对。这就是我的。

MainWindow.xaml

<Window x:Class="WpfApplication1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525" 
        Background="{Binding SelectedValue,ElementName=combo,UpdateSourceTrigger=PropertyChanged}">
    <StackPanel>
        <ComboBox Name="combo">
            <ComboBoxItem>lightcoral</ComboBoxItem>
            <ComboBoxItem>khaki</ComboBoxItem>
        </ComboBox>
    </StackPanel>
</Window>

和默认的MainWindow.xaml.cs(我创建项目后就没碰过)

谢谢,如果您需要更多信息,请告诉我!

实现此目的的一种可能方法是将 string 类型的项目放入 ComboBox,而不是 ComboBoxItems:

<Window x:Class="WpfApplication1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525"
        xmlns:sys="clr-namespace:System;assembly=mscorlib"
        Background="{Binding SelectedItem, ElementName=combo}">
    <ComboBox VerticalAlignment="Center" HorizontalAlignment="Center" x:Name="combo">
        <sys:String>Yellow</sys:String>
        <sys:String>Green</sys:String>
        <sys:String>Red</sys:String>
        <sys:String>Blue</sys:String>
    </ComboBox>
</Window>
  • 请注意,我在 mscorlib.dll 程序集中声明了指向 System CLR 命名空间的 xmlns:sys XAML Namespace。这是定义 class System.String 的地方,您需要它才能在 XAML.

  • 中使用 class
  • 另请注意,我绑定到 SelectedItem 而不是 SelectedValue,这是因为您的 ComboBox 没有 SelectedValuePath,而 WPF 没有没有 SelectedValue 的概念,因为它不知道如何从每个项目中 "retrieve the value"。

  • 另请注意,UpdateSourceTrigger 已被删除,因为它没有任何意义。 UpdateSourceTrigger 确定绑定 source 的更新方式,而不是 target 的更新方式。阅读 MSDN 上的 DataBinding 以了解此处的术语。

  • 使用 String 有效而使用 ComboBoxItem 无效的原因是 Brush [=57 的默认 Type Converter =](这是 Window 背景的类型)"understands" 如何从 string 转换,而不是从 ComboBoxItem.