WPF工具提示条件

WPF工具提示条件,wpf,binding,tooltip,Wpf,Binding,Tooltip,我在网格中有一个Textblock,有一个ToolTip,它应该显示“ToolTip”绑定,但如果它是Null或Empty它应该显示“name”绑定 如何在XAML中实现这一点 如果字符串为NULL 创建多值转换器并声明为静态资源: <local:MyConverter x:Key="MyConverter"/> 和您的文本块: <TextBlock FontSize="12" Foreground="Red" Text="{Binding MyName}">

我在网格中有一个
Textblock
,有一个
ToolTip
,它应该显示“ToolTip”绑定,但如果它是
Null
Empty
它应该显示“name”绑定

如何在XAML中实现这一点


如果字符串为
NULL

创建多值转换器并声明为静态资源:

<local:MyConverter x:Key="MyConverter"/>
和您的文本块:

<TextBlock FontSize="12" Foreground="Red" Text="{Binding MyName}">
      <TextBlock.ToolTip>
           <MultiBinding Converter="{StaticResource NameConverter}">
               <Binding Path="Tooltip" IsAsync="True"/>
               <Binding Path="MyName"/>
           </MultiBinding>
      </TextBlock.ToolTip>
</TextBlock>

来自

Windows演示基础(WPF)中的PrimoRead绑定通过指定绑定列表来工作。绑定列表按从最高优先级到最低优先级的顺序排列。如果最高优先级绑定在处理时成功返回一个值,则无需处理列表中的其他绑定。在这种情况下,最高优先级的绑定可能需要很长时间才能进行评估,成功返回值的下一个最高优先级将被使用,直到较高优先级的绑定成功返回值为止

下面是一个例子

<StackPanel>
    <ToggleButton IsChecked="{Binding ShowTooltip, Mode=TwoWay}" >toggle</ToggleButton>
    <TextBlock>
        <TextBlock.ToolTip>
            <PriorityBinding>
                <Binding Path="ToolTipSometimes" Mode="OneWay"/>
                <Binding Path="Name" Mode="OneWay"/>
            </PriorityBinding>
        </TextBlock.ToolTip>
    </TextBlock>
</StackPanel>
<TextBlock >
    <TextBlock.ToolTip>
        <MultiBinding>
            <MultiBinding.Converter>
                <local:NullCleanup/>
            </MultiBinding.Converter>
            <Binding Path="ToolTip" Mode="OneWay"/>
            <Binding Path="Text" Mode="OneWay" />
        </MultiBinding>
    </TextBlock.ToolTip>
</TextBlock>
但是,您可以将逻辑放在VM中

    private string _Tooltip;

    public string Tooltip;
    {
        get { return _Tooltip; }
        set { SetProperty(ref _Tooltip, value,()=>RaisePropertyChanged(nameof(ToolTipCleaned))); }
    }

    public string ToolTipCleaned => Tooltip ?? Name;

只有当
ToolTip
源属性返回
null
或emtpy
string
时,才可以使用带有一个或两个
DataTriggers
Style
ToolTip
属性绑定到
Name
源属性:

<TextBlock Margin="3" TextAlignment="Left" VerticalAlignment="Center" FontSize="12" Foreground="Black" HorizontalAlignment="Left" 
                   Text="{Binding Name}">
    <TextBlock.Style>
        <Style TargetType="TextBlock">
            <Setter Property="ToolTip" Value="{Binding Tooltip}" />
            <Style.Triggers>
                <DataTrigger Binding="{Binding Tooltip}" Value="{x:Null}">
                    <Setter Property="ToolTip" Value="{Binding Name}" />
                </DataTrigger>
                <DataTrigger Binding="{Binding Tooltip}" Value="">
                    <Setter Property="ToolTip" Value="{Binding Name}" />
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </TextBlock.Style>
</TextBlock>

我通过如下工具提示实现了这一点:-

<TextBlock Margin="3" TextAlignment="Left" VerticalAlignment="Center" FontSize="12" Foreground="Black" HorizontalAlignment="Left" ToolTip="" ToolTipOpening="TextBlock_ToolTipOpening"  Text="{Binding Name}" TextWrapping="Wrap" MaxWidth="470" />

它按预期工作-感谢大家的贡献…如果没有您的帮助,就无法解决此问题。

无法工作,因为他想绑定多个值,因此需要多个绑定或优先级绑定我只想显示一个工具提示-如果“工具提示”绑定值为null或空,则显示“名称”绑定值…不需要multibinding@MaiurLaximidas值为null时要显示的名称如果两个字符串都为null,则不显示任何内容displayed@MaiurLaximidas您希望它绑定到工具提示并绑定到名称,然后您希望根据值选择要显示的工具提示,sxaml用于显示而不是逻辑,如果您需要逻辑,它应该在您的视图模型中,但是您可以使用PriorityBinding或multibindings,这对我想要实现的目标不太有效……什么决定了成功返回值?我的要求是,如果第一个绑定返回null,则检查第二个绑定并显示它,即使该值为null……我希望会有类似于ToolTip=“{binding ToolTip??binding Name}的内容XAML代表可扩展应用程序标记语言,因此它与HTML属于同一类别,不包括ASP、Razor或PHP等预处理
<TextBlock Margin="3" TextAlignment="Left" VerticalAlignment="Center" FontSize="12" Foreground="Black" HorizontalAlignment="Left" 
                   Text="{Binding Name}">
    <TextBlock.Style>
        <Style TargetType="TextBlock">
            <Setter Property="ToolTip" Value="{Binding Tooltip}" />
            <Style.Triggers>
                <DataTrigger Binding="{Binding Tooltip}" Value="{x:Null}">
                    <Setter Property="ToolTip" Value="{Binding Name}" />
                </DataTrigger>
                <DataTrigger Binding="{Binding Tooltip}" Value="">
                    <Setter Property="ToolTip" Value="{Binding Name}" />
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </TextBlock.Style>
</TextBlock>
<TextBlock Margin="3" TextAlignment="Left" VerticalAlignment="Center" FontSize="12" Foreground="Black" HorizontalAlignment="Left" ToolTip="" ToolTipOpening="TextBlock_ToolTipOpening"  Text="{Binding Name}" TextWrapping="Wrap" MaxWidth="470" />
    if (!String.IsNullOrEmpty(stf.Tooltip))
    {
       t.ToolTip = stf.Tooltip;
    }
    else
    {
        t.ToolTip = stf.Name;
    }