我陷入了这个问题。我的应用程序中有一个组合框(用代码创建,而不是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;
};
这样就不会显示任何文字。但是..如果我想在组合框的文本部分内写一个固定的字符串怎么办?
谢谢
答案 0 :(得分:1)
How to display a different value for dropdown list values/selected item in a WPF ComboBox?
这是正确的做法。但是,您只是想要显示一个直接的静态标签/字符串吗?如果是这样的话,可能会更加容易地覆盖你已经在这样的网格中得到的东西:
<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>
将文本块设置为hit-tests不可见意味着它们只是传递给组合框: