组合框数据绑定到窗口背景



WPFc#这里非常新。我有兴趣拥有一个具有不同颜色选项的ComboBox,当选择选项时,它将更新窗口的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 中,而不是ComboBoxItem s:

<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 程序集中的System CLR 命名空间.dll xmlns:sys XAML 命名空间。这是定义类System.String的位置,你需要它才能在 XAML 中使用该类。

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

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

  • 使用String而使用ComboBoxItem不起作用的原因是Brush类的默认类型转换器(这是窗口背景的类型)"理解"如何从string转换,而不是从ComboBoxItem转换。

最新更新