此代码工作正确:
<UserControl x:Class="Extended.InputControls.TextBoxUserControl"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:Extended.InputControls">
<TextBox x:Name="textBox"
ToolTip="{Binding Path=CustomToolTip,RelativeSource={RelativeSource AncestorType=local:TextBoxUserControl}}"/>
</UserControl>
但是这段代码不起作用!!!
<UserControl x:Class="Extended.InputControls.TextBoxUserControl"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:Extended.InputControls">
<TextBox x:Name="textBox">
<TextBox.ToolTip>
<ToolTip Text="{Binding Path=CustomToolTip,RelativeSource={RelativeSource AncestorType=local:TextBoxUserControl}}" Background="Yellow"/>
</TextBox.ToolTip>
</TextBox>
</UserControl>
我需要创建自定义工具提示并将其绑定到CustomToolTip,但是在第二个代码中它不会绑定到任何东西 问题出在哪里?
答案 0 :(得分:1)
首先,如果我们在这里讨论WPF,那么它应该是<ToolTip Content="...">
而不是<ToolTip Text="...">
,因为ToolTip
没有Text
属性。
关于绑定:从ToolTip中绑定到用户控件中的其他元素不起作用,因为ToolTip元素不是可视树的一部分,如another question that also provides one potential solution中所述。
但是,您似乎已经绑定了UserControl代码隐藏中定义的某些属性?在这种情况下,通过将UserControl的DataContext
设置为控件本身,更容易解决:
<UserControl x:Class="Extended.InputControls.TextBoxUserControl"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:Extended.InputControls"
DataContext="{Binding RelativeSource={RelativeSource Self}}">
<TextBox x:Name="textBox">
<TextBox.ToolTip>
<ToolTip Content="{Binding CustomToolTip}" Background="Yellow"/>
</TextBox.ToolTip>
</TextBox>
</UserControl>
或者,您也可以在代码隐藏中设置DataContext
:
public TextBoxUserControl()
{
this.DataContext = this;
InitializeComponent();
}
在这两种情况下,都可以直接访问CustomToolTip
属性,而无需RelativeSource
绑定。
更好的解决方案是引入包含CustomToolTip
和所有类似属性的Viewmodel类,并将此类设置为UserControl&#39; s DataContext
。