我有一个用户控件,并将该控件的工具提示绑定到某个对象的属性中
<usercontrols:ucButton x:Name="xSaveCurrentBtn" ButtonType="ImageButton" ButtonFontImageSize="16" ButtonImageWidth="18" ButtonImageHeight="18" ButtonImageType="Save" Click="xSaveSelectedButton_Click" ButtonStyle="{StaticResource $ImageButtonStyle_Menu}" DockPanel.Dock="Right" HorizontalAlignment="Right" VerticalAlignment="Center" Margin="0,0,0,0">
<usercontrols:ucButton.ToolTip>
<ToolTip Content="{Binding ItemName, Mode=OneWay}" ContentStringFormat="Save {0}"/>
</usercontrols:ucButton.ToolTip>
</usercontrols:ucButton>
在代码中,我将ucButton的数据上下文设置为我的对象:
xSaveCurrentBtn.DataContext = WorkSpace.Instance.CurrentSelectedItem;
有时CurrentSelectedItem为null,如果是这种情况,我希望工具提示显示“未选择任何项”我尝试这样做:
xSaveCurrentBtn.Tooltip = "No Item Selected";
但是当CurrentSelectedItem不为null并且我将xSaveBtn.DataContext重置为该对象时,我仍然会看到“未选择任何项目”工具提示,就好像我的WPF工具提示部分被覆盖了并且它不再绑定到datacontext ItemName属性中一样
2条答案
按热度按时间ajsxfq5m1#
您尝试同时将属性设定为两个值。这是不可能的。您在XAML中所做的相当于:
当您将字串值设定为相同的属性时,先前的值会遗失。而且如果您不先保存它,就无法还原。
如果发生绑定错误,您可能需要分配一个值:
如何绑定要更新的数据上下文以使其成为新的CurrentSelectedItem而不显式设置它?
假设WorkSpace.Instance是一个返回WorkSpace示例的不可变属性,而CurrentSelectedItem是一个带有INotifyPropertyChanged.PropertyChanged通知的属性,那么你可以这样做:
前缀“viewmodels”取决于声明“WorkSpace”类的程序集和命名空间。
mlmc2os52#
您可以将ContentTemplate与TextBlock一起使用,它将使用StringFormat或TargetNullValue,具体取决于ItemName是否为
null
:或者如果您绑定Tooltip.Content,则会有不同的结果: