Show Tooltip wenn text gekürzt
<TextBlock Width="100" Text="The quick brown fox jumps over the lazy dog" TextTrimming="WordEllipsis">
<TextBlock.ToolTip>
<ToolTip DataContext="{Binding Path=PlacementTarget, RelativeSource={x:Static RelativeSource.Self}}">
<TextBlock Text="{Binding Text}"/>
</ToolTip>
</TextBlock.ToolTip>
</TextBlock>
Wie kann ich die ToolTip
nur, wenn der text beschnitten ist? Wie die windows-desktp shortcut-icons.
InformationsquelleAutor der Frage Navid Rahmani | 2011-06-14
Du musst angemeldet sein, um einen Kommentar abzugeben.
Arbeiten aus der Eyjafj...was auch immer die Idee, kam ich in eine Arbeitsgruppe, meist deklarative Lösung, zumindest nicht erfordern eine benutzerdefinierte Steuerung. Die erste Hürde, die zu überwinden ist, um in den TextBlock. Weil der ToolTip gerendert wird, die außerhalb der visuellen Struktur, die Sie nicht verwenden können, eine RelativeSource binding oder ElementName, um den TextBlock. Zum Glück, der ToolTip-Klasse enthält einen Verweis auf die zugehörigen element über die PlacementTarget Eigenschaft. So können Sie binden Sie das QuickInfo-Sichtbarkeit-Eigenschaft ToolTip selbst und seine PlacementTarget-Eigenschaft, um auf Eigenschaften des TextBlock:
Der nächste Schritt ist, mit einem Konverter zu suchen, an der der TextBlock, wir haben gebunden, um zu bestimmen, ob der ToolTip sichtbar sein soll oder nicht. Sie können dies tun, mit der ActualWidth und die DesiredSize. ActualWidth ist genau das, was es klingt wie; die Breite Ihrer TextBlock wurde gerendert auf dem Bildschirm. DesiredSize ist die Breite Ihrer TextBlock lieber. Das problem ist nur, DesiredSize scheint der TextTrimming berücksichtigt und nicht geben Sie die Breite der volle, Unbeschnittene text. Um dieses Problem zu lösen, können wir wieder rufen Sie die Measure-Methode übergeben Verdoppeln.Positive Unendlichkeit zu, die in der Tat Fragen, wie weit Sie den TextBlock würde, wenn es seine Breite wurden nicht eingeschränkt. Dies aktualisiert die DesiredSize-Eigenschaft und dann können wir tun, der Vergleich:
Dieser Ansatz ist tatsächlich dargestellt hier als angehängte Verhalten wenn Sie sich bewerben möchten es automatisch zu TextBlocks oder nicht wollen, zu verschwenden die Ressourcen auf die Erstellung von ToolTips, die immer unsichtbar sein. Hier ist der vollständige code für mein Beispiel:
Den Konverter:
XAML:
InformationsquelleAutor der Antwort xr280xr
Fand ich die einfachste Lösung zu erweitern TextBlock und text vergleichen-Längen, um zu bestimmen, ob, um zu zeigen, tooltip, D. H.,
Dann einfach diese benutzerdefinierte text-block in xaml wie folgt:
InformationsquelleAutor der Antwort James B
Basiert auf Ideen auf dieser Seite und mit zusätzlichen algorithmischen Korrekturen von eine andere Antwort ich diese sehr portabel-Klasse, die verwendet werden können sehr leicht. Sein Zweck ist es, zu ermöglichen, trimmen und zeigen einen ToolTip, der über den TextBlock aus, wenn der text beschnitten ist, wie es bekannt ist aus vielen Anwendungen.
Trimm-Erkennung bewiesen hat, um genau zu sein, in meiner Anwendung. Der tool-Tipp angezeigt wird, Wann genau die Trimmung Auslassungszeichen angezeigt.
XAML-Verwendung
C# usage
Die komplette Klasse
InformationsquelleAutor der Antwort ygoe
Verhaltensweisen sind Liebe, Verhaltensweisen zu Leben.
Verwendung:
Die benötigten extension Methoden:
InformationsquelleAutor der Antwort Snicker
Ich denke, Sie können erstellen einen Konverter, der vergleicht zwischen den
ActualWidth
vontextblock
und es istDesiredSize.Width
und zurückVisibility
.InformationsquelleAutor der Antwort Eyjafjallajokull
Gebucht, eine alternative Antwort mit angefügten Eigenschaft hierich denke das ist schöner, als mit einem Konverter oder einer abgeleiteten TextBlock-Steuerelement.
InformationsquelleAutor der Antwort pogosama