You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WPF中代码设置Tooltip后,原有Binding被覆盖的问题

解决WPF Tooltip绑定被直接赋值覆盖的问题

你的问题根源在于:直接通过代码给xSaveCurrentBtn.Tooltip赋值时,会完全替换掉XAML中定义的带绑定逻辑的ToolTip对象,后续再设置DataContext时,原有的绑定关系已经不存在,所以Tooltip不会更新。

推荐两种解决方案:

方案一:利用绑定的TargetNullValue(最简洁)

直接在XAML的绑定中配置空值处理,无需后台额外编写赋值逻辑。修改Tooltip的绑定表达式,添加TargetNullValue属性,当绑定的ItemName为null(或DataContext为null导致绑定源无效)时,自动显示指定文本:

<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, TargetNullValue='No Item Selected'}" ContentStringFormat="Save {0}"/>
    </usercontrols:ucButton.ToolTip>
</usercontrols:ucButton>

之后后台只需要正常设置DataContext即可:

xSaveCurrentBtn.DataContext = WorkSpace.Instance.CurrentSelectedItem;
  • 当CurrentSelectedItem不为null时,Tooltip显示Save {ItemName}
  • 当CurrentSelectedItem为null时,自动切换为No Item Selected

方案二:后台代码保留原ToolTip对象(不推荐,仅兼容场景用)

如果必须通过后台代码控制,不要直接赋值Tooltip属性,而是获取XAML中定义的原ToolTip对象,修改其Content内容或重新绑定:

var currentItem = WorkSpace.Instance.CurrentSelectedItem;
xSaveCurrentBtn.DataContext = currentItem;

var toolTip = xSaveCurrentBtn.ToolTip as ToolTip;
if (toolTip == null) return;

if (currentItem == null)
{
    // 清空绑定,设置静态文本
    BindingOperations.ClearBinding(toolTip, ToolTip.ContentProperty);
    toolTip.Content = "No Item Selected";
}
else
{
    // 重新设置绑定
    var binding = new Binding("ItemName")
    {
        Mode = BindingMode.OneWay,
        StringFormat = "Save {0}"
    };
    toolTip.SetBinding(ToolTip.ContentProperty, binding);
}

这种方法需要手动维护绑定状态,不如方案一优雅,仅在无法修改XAML的场景下使用。

内容的提问来源于stack exchange,提问作者Amit Amir

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 13:50:40