使用 TextBlock C# MVVM XAML 通过工具提示将文本绑定到特定的 ComboBox 项
Binding text via ToolTip to specific ComboBox Item with the use of TextBlock C# MVVM XAML
我想将 ToolTipText 属性 绑定到 ToolTip 本身,以便它可以为每个 ComboBoxItem 显示一些文本信息。不幸的是,我在输出 window:
中只得到空白的 TextBlock 和这个错误
System.Windows.Data Error: 40 : BindingExpression path error:
'ToolTipText' property not found on 'object' ''Double'
(HashCode=1076756480)'. BindingExpression:Path=ToolTipText;
DataItem='Double' (HashCode=1076756480); target element is 'TextBlock'
(Name=''); target property is 'Text' (type 'String')
组合框:
<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'。这是编辑后的代码:
XAML 组合框:
...
<ComboBox.ItemContainerStyle >
<Style TargetType="{x:Type ComboBoxItem}">
<EventSetter Event="UIElement.MouseMove" Handler="OnMouseHover"/>
</Style>
</ComboBox.ItemContainerStyle>
...
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])
{
item.ToolTip = "Item number one";
}
else
{
item.ToolTip = "Item number two";
}
}
我想将 ToolTipText 属性 绑定到 ToolTip 本身,以便它可以为每个 ComboBoxItem 显示一些文本信息。不幸的是,我在输出 window:
中只得到空白的 TextBlock 和这个错误System.Windows.Data Error: 40 : BindingExpression path error: 'ToolTipText' property not found on 'object' ''Double' (HashCode=1076756480)'. BindingExpression:Path=ToolTipText; DataItem='Double' (HashCode=1076756480); target element is 'TextBlock' (Name=''); target property is 'Text' (type 'String')
组合框:
<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'。这是编辑后的代码:
XAML 组合框:
...
<ComboBox.ItemContainerStyle >
<Style TargetType="{x:Type ComboBoxItem}">
<EventSetter Event="UIElement.MouseMove" Handler="OnMouseHover"/>
</Style>
</ComboBox.ItemContainerStyle>
...
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])
{
item.ToolTip = "Item number one";
}
else
{
item.ToolTip = "Item number two";
}
}