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
或emtpystring
时,才可以使用带有一个或两个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;
}