我正在尝试通过绑定
将TextBlock传递给转换器<DataTemplate>
<Grid>
<DockPanel LastChildFill="False" x:Name="dpInfo">
<Image Source = "{Binding Data.Picture}" Height="42" HorizontalAlignment="Left" Stretch="Uniform" VerticalAlignment="Center" Width="32" Margin="16,0,0,0" DockPanel.Dock="Left"/>
<TextBlock Text= "{Binding Data.Name}" x:Name="tbUserName" VerticalAlignment="Center" Padding="10,0,0,0" TextTrimming="CharacterEllipsis" DockPanel.Dock="Left"/>
<TextBlock Text= "{Binding Data.ScribbleCount, StringFormat=' ({0})', Mode=TwoWay}" VerticalAlignment="Center" DockPanel.Dock="Left"/>
</DockPanel>
<Rectangle x:Name="rctClickableArea" MouseLeftButtonDown="User_MouseLeftButtonDown" Fill="Black" Opacity="0">
<Rectangle.ToolTip>
<ToolTip DataContext="{Binding Path=PlacementTarget.DataContext, RelativeSource={x:Static RelativeSource.Self}}">
<ToolTip.Visibility>
<MultiBinding Converter="{StaticResource TooltipVisibilityConverter}">
<MultiBinding.Bindings>
<Binding Path="Data.Name"/>
<Binding ElementName="tbUserName"/>
</MultiBinding.Bindings>
</MultiBinding>
</ToolTip.Visibility>
<TextBlock Text="{Binding Data.Name}"/>
</ToolTip>
</Rectangle.ToolTip>
</Rectangle>
</Grid>
</DataTemplate>
对DataContext(Binding Path =“Data.Name”)的绑定有效,但绑定(Binding ElementName =“tbUserName”)不起作用,其中tbUserName是dbInfo DockPanel中的TextBlock。您对如何正确绑定这个有什么想法吗?
答案 0 :(得分:0)
您可能遇到两个问题......
NameScoping ...
ElementName绑定对NameScoping ...
有严格的限制基本上,当使用ElementName时 在绑定中,目标对象的NameScope用于定位 具有指定名称的元素。如果该元素没有 NameScope专门针对它,FrameworkElement.FindScope方法 继续逻辑树并回退到继承 上下文,如果没有逻辑父。名称范围是对象 所有已命名的对象都已注册。
因此,在您的情况下,ToolTip上下文之外的引用元素失败。现在为了使其正常工作,您必须使用Tag
属性...
<Rectangle Tag="{Binding ElementName tbUserName}" ...>
<Rectangle.ToolTip>
<ToolTip ...>
<ToolTip.Visibility ... >
<MultiBinding>
<Binding Path="Data.Name" />
<Binding Path="Tag"
RelativeSource="{RelativeSource
AncestorType={x:Type Rectangle}}" ...>
工具提示的可见性
您可以使用数据触发器对矩形本身进行多重绑定,并根据条件值设置所需的工具提示,而不是绑定到工具提示的可见性...
<Window.Resources>
<local:TooltipVisibilityConverter x:Key="TooltipVisibilityConverter"/>
<TextBlock x:Key="MyToolTip" Text="{Binding Data.Name}"/>
</Window.Resources>
<!-- Rest of the code --->
<Rectangle.Style>
<Style TargetType="{x:Type Rectangle}">
<Style.Triggers>
<DataTrigger Value="True">
<DataTrigger.Binding>
<MultiBinding
Converter="{StaticResource
TooltipVisibilityConverter}">
<MultiBinding.Bindings>
<Binding Path="Data.Name"/>
<Binding ElementName="HelloTB"/>
</MultiBinding.Bindings>
</MultiBinding>
</DataTrigger.Binding>
<Setter Property="ToolTip"
Value="{StaticResource MyToolTip}"/>
</DataTrigger>
</Style.Triggers>
</Style>
</Rectangle.Style>
请注意,为了简单起见,TooltipVisibilityConverter
现在返回一个布尔值。