【问题标题】:Get value of comboboxitem contentcontrol in wpf在wpf中获取comboboxitem contentcontrol的值
【发布时间】:2017-03-31 07:36:44
【问题描述】:

我是 WPF 新手。 我想知道如果我想要的文本放在comboboxitem 内的控件内而不是直接放在comboboxitem 内,我如何获得选定的文本。 我知道这是非常基本的,但如果有人可以为我提供一个简单快捷的解决方案,我将不胜感激

我的简单组合框代码如下:

<ComboBox x:Name="cmdTest">
    <ComboBoxItem>
        <TextBlock Text="RED" Background="RED" Foreground="White" FontFamily="Sans Serif" FontSize="14"/>
    </ComboBoxItem>
    <ComboBoxItem>
        <Grid Width="250">
            <TextBlock Text="GREEN" Background="GREEN" Foreground="White" FontFamily="Sans Serif" FontSize="14" Height="15"/>
        </Grid>
    </ComboBoxItem>
    <ComboBoxItem>
        <TextBlock Text="BLUE" Background="Blue" Foreground="White" FontFamily="Sans Serif" FontSize="14"/>
    </ComboBoxItem>
</ComboBox>

【问题讨论】:

  • 你在使用 MVVM 吗?
  • 描述不清楚。
  • tx Mighty badaboom,是的,在实际项目中我将使用 MVVM。所以如果你 cud 也提供基于 MVVVM 的解决方案,请提出要求。但是因为我是一个绝对的新手,所以简短而简单..:-).

标签: wpf combobox selecteditem contentcontrol


【解决方案1】:

XAML:

<ComboBox Name="anyname" SelectionChanged="cmbColors_SelectionChanged">

C#:

private void cmbColors_SelectionChanged(object sender, System.Windows.Controls.SelectionChangedEventArgs e)
{
    MessageBox.Show(string.Format("Selected Item: {0}", anyname.Text));
}

【讨论】:

    【解决方案2】:

    试试这个:

    private void cmdTest_SelectionChanged(object sender, SelectionChangedEventArgs e)
    {
        ComboBoxItem item = cmdTest.SelectedItem as ComboBoxItem;
        if (item != null)
        {
            TextBlock txt = item.Content as TextBlock;
            if (txt != null)
                MessageBox.Show(txt.Text + " is selected");
        }
    }
    

    【讨论】:

    • tx..这对我有用。 :-)。还有一个问题..当bi运行我的应用程序并且组合框显示为当前xaml时,虽然我已经按照上面的建议在组合框中应用了Horizo​​ntalContentAlignment =“Stretch”属性,但组合框的背景颜色仍然留下几个像素在组合框项目的任一侧未着色。是否有一些 xaml 属性或任何可以涵盖的内容? tx 提前`:-).
    • 如果您还有其他问题,请提出新问题。
    • 如果您的问题已经解决,请记得接受答案:meta.stackexchange.com/questions/5234/…
    【解决方案3】:

    首先更改您的 xaml 代码:<ComboBox x:Name="cmdTest" HorizontalContentAlignment="Stretch" SelectedValuePath="Text"> <ComboBoxItem Padding="0" > <TextBlock Text="RED" Background="RED" Foreground="White" FontFamily="Sans Serif" FontSize="14"/> </ComboBoxItem> <ComboBoxItem Padding="0"> <TextBlock Text="GREEN" Background="GREEN" Foreground="White" FontFamily="Sans Serif" FontSize="14" Height="15"/> </ComboBoxItem> <ComboBoxItem Padding="0"> <TextBlock Text="BLUE" Background="Blue" Foreground="White" FontFamily="Sans Serif" FontSize="14"/> </ComboBoxItem> </ComboBox>

    获取文本值后使用:

     var z = cmdTest.Text.ToString();
                MessageBox.Show(z);
    

    【讨论】:

    • tx..这对我有用。 :-)。还有一个问题..当我运行我的应用程序并且组合框显示当前的xaml时,虽然我已经按照上面的建议在组合框中应用了Horizo​​ntalContentAlignment =“Stretch”属性,但组合框的背景颜色仍然留下几个像素在组合框项目的任一侧未着色。是否有一些 xaml 属性或任何可以涵盖的内容? tx 提前`:-).
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多