WPF
和c#
这里非常新。我有兴趣拥有一个具有不同颜色选项的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 命名空间.dllxmlns:sys
XAML 命名空间。这是定义类System.String
的位置,你需要它才能在 XAML 中使用该类。另请注意,我绑定到
SelectedItem
而不是SelectedValue
,这是因为您的 ComboBox 没有SelectedValuePath
,而 WPF 没有SelectedValue
的概念,因为它不知道如何从它的每个项目中"检索值"。另请注意,
UpdateSourceTrigger
被删除,因为它没有任何意义。UpdateSourceTrigger
确定绑定源的更新方式,而不是目标。阅读有关 MSDN 上的数据绑定以了解此处的术语。使用
String
而使用ComboBoxItem
不起作用的原因是Brush
类的默认类型转换器(这是窗口背景的类型)"理解"如何从string
转换,而不是从ComboBoxItem
转换。