Der folgende Code verfügt über eine einfache Bindung, die den Text des TextBlocks mit dem Namen MyTextBlock unter Verwendung der exakt gleichen Bindungsnotation an die Text- und ToolTip-Eigenschaft von TextBox bindet:
<StackPanel>
<TextBlock x:Name="MyTextBlock">Foo Bar</TextBlock>
<TextBox Text="{Binding ElementName=MyTextBlock, Path=Text, StringFormat='It is: \{0\}'}"
ToolTip="{Binding ElementName=MyTextBlock, Path=Text, StringFormat='It is: \{0\}'}" />
</StackPanel>
Die Bindung verwendet auch die mit .NET 3.5 SP1 eingeführte StringFormat-Eigenschaft, die für die obige Text-Eigenschaft einwandfrei funktioniert, für die QuickInfo jedoch fehlerhaft zu sein scheint. Das erwartete Ergebnis ist "Es ist: Foo-Leiste". Wenn Sie jedoch mit der Maus über die Textbox fahren, zeigt die QuickInfo nur den Bindungswert an, nicht den mit Zeichenfolgen formatierten Wert. Irgendwelche Ideen?
Antworten:
QuickInfos in WPF können alles enthalten, nicht nur Text. Sie bieten daher eine ContentStringFormat-Eigenschaft für die Zeiten, in denen Sie nur Text möchten. Soweit ich weiß, müssen Sie die erweiterte Syntax verwenden:
Ich bin mir nicht 100% sicher, ob die Bindung mithilfe der ElementName-Syntax einer solchen verschachtelten Eigenschaft gültig ist, aber die ContentStringFormat-Eigenschaft ist genau das, wonach Sie suchen.
quelle
StringFormat
wird nur angewendet, wenn derTargetType
Typ is string ist.ToolTip
Der Inhalt ist vom Typobject
.Es könnte ein Fehler sein. Wenn Sie eine kurze Syntax für den Tooltip verwenden:
StringFormat wird ignoriert, aber wenn Sie eine erweiterte Syntax verwenden:
Es funktioniert wie erwartet.
quelle
Wie Matt sagte, kann ToolTip alles enthalten, sodass Sie eine TextBox.Text in Ihre ToolTip einbinden können.
Sie können sogar ein Raster in die QuickInfo stapeln und Ihren Text gestalten, wenn Sie möchten.
quelle
Ihr Code kann so kurz sein:
Wir werden die Tatsache verwenden, dass Konverter im Gegensatz zu StringFormat niemals ignoriert werden.
Fügen Sie dies in StringFormatConverter.cs ein :
Fügen Sie dies in Ihre ResourceDictionary.xaml ein :
quelle
In dieser Situation können Sie die relative Bindung verwenden:
quelle
Das Folgende ist eine wortreiche Lösung, aber sie funktioniert.
Ich würde eine viel einfachere Syntax bevorzugen, so etwas wie die in meiner ursprünglichen Frage.
quelle