繁体   English   中英

WPF组合框具有不同的所选项目和文本

[英]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;
};

这样就不会显示任何文本。 但是..如果我想在组合框的文本部分内写入固定的字符串怎么办?

谢谢

哇,真是痛苦。 我以为那会很简单,但事实并非如此。 我假定您可以为组合框中显示的内容设置模板,并为下拉列表中显示的内容分别设置模板。 可以,但是必须使用内容选择器:

如何在WPF组合框中为下拉列表值/所选项目显示不同的值?

这是正确的做法。 但是,您是否只想显示静态标签/字符串? 如果是这样,将其覆盖在这样的网格中可能要容易得多:

    <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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM