【发布时间】:2019-01-13 18:16:26
【问题描述】:
我想将 ToolTipText 属性绑定到 ToolTip 自身,以便它可以显示每个 ComboBoxItem 的一些文本信息。不幸的是,我在输出窗口中只得到空白的 TextBlock 和这个错误:
System.Windows.Data 错误:40:BindingExpression 路径错误: 在“对象”“双”上找不到“工具提示文本”属性 (哈希码=1076756480)'。绑定表达式:路径=工具提示文本; DataItem='双' (HashCode=1076756480);目标元素是'TextBlock' (名称='');目标属性是“文本”(类型“字符串”)
组合框:
<ComboBox Name="PradPojemnosciowyComboBox"
SelectedValue="{Binding SelectedItem, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
ItemsSource="{Binding Path=LiniaWyComboBox, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
IsEditable="True"
IsReadOnly="False"
Text="{Binding Prad_pojemnosciowy, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
IsTextSearchEnabled="False"
IsSynchronizedWithCurrentItem="True"
PreviewKeyDown="PradPojemnosciowyComboBox_OnPreviewKeyDown">
<ComboBox.Style>
<Style TargetType="ComboBox">
<Style.Triggers>
<Trigger Property="SelectedValue" Value="{x:Null}">
<Setter Property="SelectedIndex" Value="{Binding LiniaWyComboBox}"/>
</Trigger>
</Style.Triggers>
</Style>
</ComboBox.Style>
<ComboBox.ItemContainerStyle >
<Style TargetType="ComboBoxItem">
<EventSetter Event="MouseMove" Handler="OnMouseHover" />
<Setter Property="ToolTip">
<Setter.Value>
<TextBlock Text="{Binding ToolTipText , RelativeSource={RelativeSource Self}}" >
</TextBlock>
</Setter.Value>
</Setter>
</Style>
</ComboBox.ItemContainerStyle>
</ComboBox>
方法 - OnMouseHover:
private void OnMouseHover (object sender, MouseEventArgs e)
{
var lineSelected = (modelGPZ.GetLineWyList().FirstOrDefault(x => x.isSelected == true));
ComboBoxItem item = sender as ComboBoxItem;
if ((double)item.Content == lineSelected.LiniaWyComboBox[0])
{
//ToolTipTextList.Add("FirstItem");
ToolTipText = "ONE!!!!!!!!!!!!!!";
OnPropertyChanged("LiniaWyComboBox");
OnPropertyChanged("ToolTipText");
}
else
{
//ToolTipTextList.Add("SecondItem");
ToolTipText = "TWO!!!!!!!!!!!!!!";
OnPropertyChanged("LiniaWyComboBox");
OnPropertyChanged("ToolTipText");
}
}
工具提示文本:
private string _toolTipText;
public string ToolTipText
{
get { return _toolTipText; }
set {
if (_toolTipText!=value)
{
_toolTipText = value;
OnPropertyChanged("ToolTipText");
}
else
{
_toolTipText = "";
}
}
}
数据网格:
<DataGrid Style="{StaticResource AzureDataGrid}"
Grid.Row="1"
VerticalAlignment="Stretch"
SelectedIndex="0"
Name="LinieWyDatagrid"
ItemsSource="{Binding LiniaWyComboBox, RelativeSource={RelativeSource AncestorType=Window}, Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"
CanUserAddRows="False"
CanUserDeleteRows="False"
CanUserSortColumns="True"
AutoGenerateColumns="False"
ScrollViewer.CanContentScroll="True"
ScrollViewer.VerticalScrollBarVisibility="Auto"
ScrollViewer.HorizontalScrollBarVisibility="Auto"
SelectionChanged="LinieWyDatagrid_SelectedCellsChanged"
SelectionMode="Single">
【问题讨论】:
-
ToolTipText 的声明方式和位置? DataContext的价值是什么?
-
我已经用 ToolTipText 声明更新了帖子。当我将鼠标悬停在 ComboBoxItem 上时,DataContext 的值是 .. null .. 嗯。你的意思是它的价值是什么?
-
删除RelativeSource部分不行吗?我认为这样你尝试绑定显然不存在的 ComboBox 的 ToolTipText 属性。
-
不幸的是不是......这就是问题所在。现在或以后存在绑定错误
-
如果你在
InitializeComponent()之后添加DataContext = this?
标签: c# xaml mvvm combobox tooltip