ComboBox数据绑定到窗口背景

时间:2015-01-26 05:02:31

标签: c# wpf xaml data-binding combobox

此处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(自创建项目以来,我还没有触及它)

谢谢,如果您需要更多信息,请与我联系!

1 个答案:

答案 0 :(得分:3)

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

<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>
  • 请注意,我声明xmlns:sys XAML Namespace指向mscorlib.dll程序集中的System CLR命名空间。这是定义类System.String的地方,您需要能够在XAML中使用该类。

  • 另请注意,我与SelectedItem绑定而不是SelectedValue,这是因为您的ComboBox没有SelectedValuePath,而且WPF没有SelectedValue。 t具有UpdateSourceTrigger的概念,因为它不知道如何&#34;检索值&#34;来自每个项目。

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

  • 使用ComboBoxItem工作并使用Brush的原因不是因为string类的默认Type Converter(这是窗口的背景)&#34;了解&#34;如何转换ComboBoxItem,而不是转换为{{1}}。