绑定工具提示到自定义依赖项属性

时间:2014-08-01 05:41:42

标签: xaml binding customproperty

此代码工作正确:

   <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,但是在第二个代码中它不会绑定到任何东西 问题出在哪里?

1 个答案:

答案 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