繁体   English   中英

WPF Combobox带有清晰按钮

[英]WPF Combobox with clear button

我正在尝试创建一个WPF ComboBox控件,当控件选中时,它包含一个清除按钮。 控件应该有两种状态:如果选择了某些内容,控件看起来就像带有清除按钮的标签。 如果没有选择,则显示正常的ComboBox。 这两个州如下图所示。

在此输入图像描述

研究我的问题我遇到了以下与我非常相似的SO问题:

在wpf中为组合框添加一个按钮

如何子类化WPF ComboBox以添加额外的按钮

两者都建议子类化ComboBox,提供带有额外按钮的修改模板。 但这是我有点困惑的地方。 John Bowen对第二个链接问题的回答表明我应该复制ComboBox的默认模板; 修改它以包括从Blend获取模板的按钮。 不熟悉混合我在MSDN上找到了模板:

http://msdn.microsoft.com/en-us/library/ms752094(v=vs.85).aspx

我的问题是我不太确定我应该改变什么。 看看默认模板,我想我需要做一些事情:

  • 创建一个新的'IsSelected'属性,我可以挂钩触发器。
  • 添加一个清除按钮的控件模板,触发器附加到IsSelected,隐藏按钮。
  • 将IsSelected触发器附加到ComboBoxToggleButton控件模板以在选择时隐藏它。
  • 当IsSelected为true时,以某种方式重新调整ComboBox模板中PART_EditableTextBox文本框的大小。

如果我咆哮错误的树,这看起来是否正确,以及我如何做或任何建议的任何指示。

也许你会接受一个更简单的解决方案 - 只需在ComboBox上方放置一个带按钮的TextBlock?

xaml将如下所示:

<Grid>
    <ComboBox ItemsSource="{Binding ...}" x:Name="cbox"/>
    <Grid Background="Gray" Visibility="{Binding SelectedItem, ElementName=cbox, Converter={StaticResource NullItem2Visibility}}">
        <TextBlock Text="{Binding SelectedItem, ElementName=cbox}" HorizontalAlignment="Left"/>
        <Button Content="Clear" HorizontalAlignment="Right" Click="ClearItem"/>
    <Grid>
</Grid>

Codebehind将有方法ClearItem:

public void ClearItem(object sender, EventArgs e){
    cbox.SelectedItem=null;
}

并显示和隐藏文本块和按钮的转换器:

class NullItem2Visibility:IValueConverter{
    public object Convert(object value, Type type, object parameter, CultureInfo i){
        return value == null ? Visibility.Collapsed : Visibility.Visible;
    }
    public object ConvertBack(...){...}
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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