![](/img/trans.png)
[英]wpf ComboBox Selected Item Displaying different text then item in drop down
[英]WPF Combobox with different selected item and text
我陷入了这个问题。 我的应用程序中有一个组合框(用代码创建,而不是XAML创建); 我已经用复选框填充了它,因为我需要一个带有复选框的下拉控件。
现在,我不需要组合框选择,因为它毫无意义。 所以我想在控件的文本部分显示一个标签。
有没有办法做到这一点? 这是一个最小的示例:
myComboBox = new System.Windows.Controls.ComboBox();
foreach (var key in myDictionary.Keys)
{
System.Windows.Controls.CheckBox chk = new System.Windows.Controls.CheckBox();
chk.Content = key;
chk.SetBinding(System.Windows.Controls.CheckBox.IsCheckedProperty, new Binding() { Mode = BindingMode.TwoWay, Source = this, Path = new PropertyPath("myDictionary[" + key + "]") });
RoutedEventHandler ev = (sender, e) =>
{
// Do something when a checkbox is changed
};
chk.Checked += ev;
chk.Unchecked += ev;
myComboBox.Items.Add(chk);
}
这样,如果用户单击复选框,则复选框内容将显示在文本字段中。
我也修改了它
myComboBox.SelectionChanged += (sender, jender) =>
{
myComboBox.SelectedItem = null;
};
这样就不会显示任何文本。 但是..如果我想在组合框的文本部分内写入固定的字符串怎么办?
谢谢
哇,真是痛苦。 我以为那会很简单,但事实并非如此。 我假定您可以为组合框中显示的内容设置模板,并为下拉列表中显示的内容分别设置模板。 可以,但是必须使用内容选择器:
这是正确的做法。 但是,您是否只想显示静态标签/字符串? 如果是这样,将其覆盖在这样的网格中可能要容易得多:
<Grid>
<ComboBox x:Name="Checkbox" SelectionChanged="Checkbox_SelectionChanged">
<ComboBox.Items>
<CheckBox Content="Test1"/>
<CheckBox Content="Test2"/>
<CheckBox Content="Test3"/>
</ComboBox.Items>
</ComboBox>
<TextBlock IsHitTestVisible="False" Text="My Text" VerticalAlignment="Center" Margin="5"/>
</Grid>
将文本块设置为对命中测试不可见,意味着它们仅被传递到组合框:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.