试图根据其文本(隐藏为空)和布尔值(WPF)[重复]

问题描述 投票:0回答:0

i最初有一个“不能施放internal.internal.namedobject到[x]”错误。据我了解,错误会触发,因为绑定找不到指定的属性。但是,我试图使用2个文本块进行调试,看看绑定是否给我一些东西,它们似乎可以正常工作。我已经抓住稻草了几个小时,我只是找不到问题。 基本上,我有一个工具提示,我不想看到它是空的,要么被布尔值设置为“隐藏”。 the是部分XAML:

<UserControl x:Class="TidyDesk.UserControls.BoxButton" [...] xmlns:local="clr-namespace:TidyDesk.UserControls" xmlns:conv="clr-namespace:TidyDesk.Converters" mc:Ignorable="d" Width="{Binding BtnSize}" Height="{Binding RelativeSource={RelativeSource Self}, Path=Width}" Name="ThisUserControl" d:DesignHeight="100" d:DesignWidth="100"> <UserControl.Resources> [...] <conv:ToolTipVisibilityMultiConverter x:Key="TTVisConv"/> </UserControl.Resources> <StackPanel> <TextBlock Text="{Binding ShowToolTip}"/> <TextBlock Text="{Binding ToolTipText}"/> <Image Name="img" Stretch="Fill" Source="{Binding ImgPath}" Width="{Binding ImgSize}" Height="{Binding RelativeSource={RelativeSource Self}, Path=Width}" > <Image.ToolTip> <ToolTip Content="{Binding ToolTipText}" ToolTipService.InitialShowDelay="10"> <ToolTip.Visibility> <MultiBinding Converter="{StaticResource TTVisConv}"> <Binding Path="DataContext.ShowToolTip" ElementName="ThisUserControl"/> <Binding Path="DataContext.ToolTipText" ElementName="ThisUserControl" /> </MultiBinding> </ToolTip.Visibility> </ToolTip> </Image.ToolTip> [...] </Image> [...] </StackPanel> </UserControl>

the是USERCORTROL的部分代码:

namespace TidyDesk.UserControls { public partial class BoxButton : UserControl { public BoxButton() { InitializeComponent(); DataContext = this; [...] } [...] public string ToolTipText { get; set; } = ""; public bool ShowToolTip { get; set; } = true; } }
这是转换器:

namespace TidyDesk.Converters { public class ToolTipVisibilityMultiConverter : IMultiValueConverter { public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture) { if (!(bool)values[0] || String.IsNullOrEmpty((string)values[1])) return Visibility.Collapsed; else return Visibility.Visible; } public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture) { throw new NotImplementedException(); } } }
到目前为止,我尝试过:

<Binding Path="DataContext.ShowToolTip" ElementName="ThisUserControl"/>

<Binding Path="ShowToolTip" ElementName="ThisUserControl"/>

<Binding Path="ShowToolTip" RelativeSource="{RelativeSource FindAncestor, AncestorType=local:BoxButton}"/>
<Binding Path="ShowToolTip" RelativeSource="{RelativeSource FindAncestor, AncestorType=UserControl}"/>
<Binding Path="DataContext.ShowToolTip" RelativeSource="{RelativeSource FindAncestor, AncestorType=Image}"/>

这些在文本块中的所有作品,除了我只能在工具提示内尝试的最后一个工作。但是无论我做什么,当我尝试绑定工具提示中的东西时,我会得到这个:
System.invalidcastException:“无法将“ Ms.internal.namedobject”类型的对象施加到类型为“ System.Boolean”。

I发现这可能是一个工具提示问题,尚未使我活化,并返回一些我可以像...

一样过滤掉的情况。

if (values[0] != DependencyProperty.UnsetValue && values[1] != DependencyProperty.UnsetValue) return Visibility.Collapsed;

...但是随后工具提示总是崩溃,并且绑定仍然“找不到原点”。这里有什么问题?我想念明显的东西吗?

this已被标记为this问题

的重复,该问题解决了一个不同的问题,并且没有提及任何地方如何解决我遇到的约束问题。他们试图将工具提示与另一个元素的价值联系起来,我将其绑定到代码范围内声明的公共财产。就我而言,仅设置绑定路径就足够了,而没有像这样的位置。它还没有提及我遇到的工具提示的初始化问题(不设值)。 我更改了标题,使其与我遇到的问题更加相关。不确定这是否会留在这里,但是那里必须有其他人损失数小时来隐藏一个空的工具提示,同时也可以用布尔来禁用它。

该代码有效:
<Image.ToolTip>
    <ToolTip Content="{Binding ToolTipText}" ToolTipService.InitialShowDelay="10">
        <ToolTip.Visibility>
            <MultiBinding Converter="{StaticResource TTVisConv}">
                <Binding Path="ShowToolTip"/>
                <Binding Path="ToolTipText" />
            </MultiBinding>
        </ToolTip.Visibility>
    </ToolTip>
</Image.ToolTip>

他们在评论中提出的这篇文章,他们解释说工具提示/弹出/contexentMenu是在主窗口上显示在主窗口上的,因此具有不同的视觉树。这意味着在这种情况下无法使用元素名称和亲戚,因为它们会搜索工具提示的视觉树,而不是主要的树,什么也没找到。这就是为什么它不起作用。 我不确定为什么尽管在另一个窗口上,工具提示仍然可以访问主窗口的数据台面,但我将其留给另一个问题。


wpf data-binding
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.