【问题标题】:WPF ComboBox Text property blank with ItemTemplateWPF ComboBox Text 属性为空白,ItemTemplate
【发布时间】:2015-01-28 17:56:50
【问题描述】:

我有一个 ComboBox,它使用由 CheckBox 和 TextBlock 组成的 ItemTemplate。我的目标是,当项目被选中/取消选中时,折叠的组合框显示一个逗号分隔的选中项目列表。我认为 ComboBox 的 Text 属性可以用于此目的,但这仅在 IsEditable = true 时启用,否则即使绑定到属性也只是空白。我不希望组合可编辑。

如果我可以提供某种简单的模板来显示由列表中选中的项目组成的属性,那就太好了。这可能吗?

<ComboBox ItemsSource="{Binding Issues}" Text="{Binding IssuesCSV}">
    <ComboBox.ItemTemplate>
        <DataTemplate>
            <StackPanel Orientation="Horizontal">
                <CheckBox IsChecked="{Binding IsSelected, Mode=TwoWay}" Margin="4 0 4 0" 
                          IsEnabled="{Binding IsEnabled}" />
                <TextBlock Text="{Binding Issue.Number}" />
            </StackPanel>
        </DataTemplate>
    </ComboBox.ItemTemplate>
</ComboBox>

【问题讨论】:

标签: wpf xaml combobox itemtemplate


【解决方案1】:

您想要的行为与 ComboBox 有很大不同,您可能需要考虑为自己构建一个自定义控件。

但是...我认为 有一种方法可以从 ComboBox 中获取您想要的内容

首先,创建一个 VisualBrush 资源并将其绑定到您的 IssuesCSV 值:

 <Window.Resources>
    <VisualBrush x:Key="TextBrush" TileMode="None" Opacity="0.4" Stretch="None" AlignmentX="Left">
        <VisualBrush.Visual>
            <TextBlock Text="{Binding IssuesCSV}"/>
        </VisualBrush.Visual>
    </VisualBrush>
</Window.Resources>

然后,设置 ComboBox 的背景属性以使用该画笔资源:

<ComboBox ... Background="{StaticResource TextBrush}" ... />

然后,将 ComboBox 设置为可编辑但只读。这将防止不可编辑 ComboBox 的银色默认样式在下拉期间覆盖您的文本:(您也可以使用 ComboBox 样式来实现这一点,同时保持 ComboBox 真正不可编辑)

<ComboBox ... IsReadOnly="True" IsEditable="True" ... />

最后,通过为 SelectionChanged 事件提供处理程序来防止用户实际选择 ComboBoxItem,该处理程序只是将 SelectedItem 设置回 null:

<ComboBox ... SelectionChanged="myCB_SelectionChanged" ... />

private void myCB_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
   myCB.SelectedItem = null;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-08-22
    • 2015-09-10
    • 2021-10-09
    • 1970-01-01
    • 2014-11-26
    • 2020-04-05
    • 1970-01-01
    相关资源
    最近更新 更多