WPF Combobox下拉列表Tooltip绑定失效问题求助
解决WPF ComboBox下拉项Tooltip为空的问题
问题出在绑定路径的大小写不匹配:你的ComboList类中Tooltip属性名是小写开头的Tooltip,但XAML里绑定的是大写开头的ToolTip,WPF绑定严格区分大小写,导致无法找到对应属性,所以下拉项Tooltip为空。
修正步骤
1. 修正XAML中的绑定路径
修改ComboBox.ItemContainerStyle里的绑定路径,和ComboList的属性名保持一致:
<ComboBox Name="CMB_PortCOM" Width="90" Style="{StaticResource MyCombo}" Margin="5,10,5,10" DisplayMemberPath="Name" SelectedValuePath="Id" ItemsSource="{Binding CMB_PortCOM_Source}" SelectedValue="{Binding CMB_PortCOM_SelectedValue}" SelectedItem="{Binding CMB_PortCOM_SelectedItem}" ToolTip="{Binding CMB_PortCOM_TooTip}"> <ComboBox.ItemContainerStyle> <Style TargetType="ComboBoxItem"> <Setter Property="ToolTip" Value="{Binding Tooltip}" /> </Style> </ComboBox.ItemContainerStyle> </ComboBox>
如果想保留嵌套TextBlock的写法,只需要修正路径:
<Setter Property="ToolTip"> <Setter.Value> <TextBlock Text="{Binding Path=Tooltip}" /> </Setter.Value> </Setter>
2. 可选:实现INotifyPropertyChanged(支持动态更新)
如果后续需要动态修改Tooltip内容并同步到UI,ComboList类需要实现INotifyPropertyChanged接口,否则数据变更后UI不会更新:
using System.ComponentModel; using System.Xml.Serialization; public class ComboList : INotifyPropertyChanged { private int _Id; [XmlAttribute("Id")] public int Id { get => _Id; set { _Id = value; OnPropertyChanged(nameof(Id)); } } private string _name; [XmlAttribute("Name")] public string Name { get => _name; set { _name = value; OnPropertyChanged(nameof(Name)); } } private string _tooltip; [XmlAttribute("Tooltip")] public string Tooltip { get => _tooltip; set { _tooltip = value; OnPropertyChanged(nameof(Tooltip)); } } public event PropertyChangedEventHandler PropertyChanged; protected virtual void OnPropertyChanged(string propertyName) { PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); } }
完成以上修改后,ComboBox下拉项的Tooltip就能正常显示设备描述了。
内容的提问来源于stack exchange,提问作者Megamario
相关产品推荐
相关产品推荐

