我想在组合框中显示默认文本.例如,“选择一个人”消息.你能帮帮我吗?
请注意我正在使用domaincontext的数据绑定
谢谢 !!
解决方法
为此,我使用了一个派生的ExtendedComboBox类,它扩展了内置的ComboBox类.您可以在
my blog post或更低版本中找到此类的源代码.
将此类添加到项目后,可以使用此XAML代码显示默认值:
<local:ExtendedComboBox ItemsSource="{Binding ...Whatever...}" NotSelectedText="Select item..." />
此外,这是带有此控件的test page.我认为第二个组合框就是你所需要的.
这个类的完整代码:
[TemplateVisualState(Name = ExtendedComboBox.StateNormal,GroupName = ExtendedComboBox.GroupItemsSource)] [TemplateVisualState(Name = ExtendedComboBox.StateNotSelected,GroupName = ExtendedComboBox.GroupItemsSource)] [TemplateVisualState(Name = ExtendedComboBox.StateEmpty,GroupName = ExtendedComboBox.GroupItemsSource)] public class ExtendedComboBox : ComboBox { public const string GroupItemsSource = "ItemsSourceStates"; public const string StateNormal = "Normal"; public const string StateNotSelected = "NotSelected"; public const string StateEmpty = "Empty"; private ContentPresenter selectedContent; public ExtendedComboBox() { this.DefaultStyleKey = typeof(ComboBox); } public override void OnApplyTemplate() { base.OnApplyTemplate(); this.selectedContent = this.GetTemplateChild("ContentPresenter") as ContentPresenter; // This event can change the NotSelected state this.SelectionChanged += (s,e) => this.SetTextIfEmpty(); // Set a state at start this.SetTextIfEmpty(); } // This method can change the Empty state protected override void OnItemsChanged(System.Collections.Specialized.NotifyCollectionChangedEventArgs e) { base.OnItemsChanged(e); this.SetTextIfEmpty(); } /// <summary> /// Text if the SelectedItem property is null. /// </summary> public string NotSelectedText { get { return (string)GetValue(NotSelectedTextProperty); } set { SetValue(NotSelectedTextProperty,value); } } public static readonly DependencyProperty NotSelectedTextProperty = DependencyProperty.Register("NotSelectedText",typeof(string),typeof(ExtendedComboBox),new PropertyMetadata(" ")); /// <summary> /// Text if there are no items in the ComboBox at all. /// </summary> public string EmptyText { get { return (string)GetValue(EmptyTextProperty); } set { SetValue(EmptyTextProperty,value); } } public static readonly DependencyProperty EmptyTextProperty = DependencyProperty.Register("EmptyText",new PropertyMetadata(null)); /// <summary> /// Changes the state of this control and updates the displayed text. /// </summary> protected void SetTextIfEmpty() { if (this.selectedContent == null || !(this.selectedContent.Content is TextBlock)) return; var text = this.selectedContent.Content as TextBlock; if (this.SelectedItem == null && this.Items != null && this.Items.Count > 0) { text.Text = this.NotSelectedText; VisualStateManager.GoToState(this,ExtendedComboBox.StateNotSelected,true); } else if (this.SelectedItem == null) { text.Text = this.EmptyText ?? this.NotSelectedText; VisualStateManager.GoToState(this,ExtendedComboBox.StateEmpty,true); } else VisualStateManager.GoToState(this,ExtendedComboBox.StateNormal,true); } }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。