簡體   English   中英

如何在工具提示中綁定其他元素

[英]How to binding other element in ToolTip

我想在工具提示中綁定文本,但是我有一個問題,它的綁定值是其他元素控件,因此我基本上無法通過綁定獲取它們的值。

<TextBlock x:Name="txb2" Text="Hello Stackoverflow"/>

<TextBox Grid.Row="1" TextChanged="TextBox_TextChanged">
    <TextBox.ToolTip>
        <TextBlock>
            <Run Text="{Binding ElementName=txb2, Path=Text}" FontWeight="Bold"/>
        </TextBlock>
    </TextBox.ToolTip>
</TextBox>

基本上我嘗試綁定此代碼。

如果查看輸出,將看到錯誤:

System.Windows.Data錯誤:4:找不到參考'ElementName = txb2'的綁定源。 BindingExpression:Path = Text; DataItem = null; 目標元素是“運行”(HashCode = 58577354); 目標屬性為“文本”(類型為“字符串”)

您可以使用x:Reference修復它:

<TextBlock x:Name="txb2" Text="Hello Stackoverflow"/>

<TextBox Grid.Row="1">
    <TextBox.ToolTip>
        <TextBlock>
            <Run Text="{Binding Source={x:Reference txb2}, Path=Text}" FontWeight="Bold"/>
        </TextBlock>
    </TextBox.ToolTip>
</TextBox>

至於ElementName和x:Reference之間的區別,請看以下線程 由於Tooltip不是Ui屬性,因此ElementName不起作用,但是ElementName在搜索txb2時僅適用於Ui元素層次結構(可視樹)。

工具提示存在於視覺樹之外,因此無法按名稱引用其他控件。 工具提示僅知道其自己的PlacementTarget-針對其顯示的UIElement。

允許工具提示引用其他控件的一種方法是劫持此放置目標控件的一些其他未使用的屬性(Tag最適合),然后可以由工具提示引用。

<TextBox x:Name="txb2" Text="Hello Stackoverflow" Width="200" />

<TextBox Grid.Row="1" Tag="{Binding ElementName=txb2}" Width="200">
    <TextBox.ToolTip>
        <ToolTip DataContext="{Binding PlacementTarget.Tag, RelativeSource={RelativeSource Self}}">
            <TextBlock>
                <Run Text="{Binding Text}" FontWeight="Bold" />
            </TextBlock>
         </ToolTip>
    </TextBox.ToolTip>
</TextBox>

如果您使用的是MVVM設計模式,則另一種方法(不需要屬性劫持)是綁定到PlacementTarget的DataContext(通常是ViewModel)。 然后,您可以將工具提示的內容綁定到所需的任何屬性。

<ToolTip DataContext="{Binding PlacementTarget.DataContext, RelativeSource={RelativeSource Self}}">
    ....

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM