ComboBox 数据绑定到 window 后台
ComboBox databinding to window background
这里的 WPF
和 c#
很新。我有兴趣拥有一个具有不同颜色选项的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,而不是 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.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
.
这里的 WPF
和 c#
很新。我有兴趣拥有一个具有不同颜色选项的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,而不是 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.dll 程序集中声明了指向
System
CLR 命名空间的xmlns:sys
XAML Namespace。这是定义 classSystem.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
.