== сравнивает ссылки двух объектов. Для перечислений гарантируется, что только будет один экземпляр, и поэтому для любых двух перечислений, которые являются тем же, == будет верно.
Ссылка:
http://www.ajaxonomy.com/2007/java/making-the-most-of-java-50-enum-tricks
(ничего не мог найти в документах солнца)
Вы можете использовать свойство привязки StringFormat в .NET 3.5 SP1:
<TextBlock Text="{Binding UserName,StringFormat='Welcome, \{0\}!'}" />
Обратите внимание, что вам нужно экранировать фигурные скобки в строковом формате с помощью обратной косой черты.
Обновление Да, также поддерживаются несколько значений:
<TextBlock>
<TextBlock.Text>
<MultiBinding StringFormat="Welcome, {0} {1}!">
<Binding Path="FirstName" />
<Binding Path="LastName" />
</MultiBinding>
</TextBlock.Text>
</TextBlock>
Это самый простой способ смешать текст и элементы управления
<TextBlock>Welcome, <TextBlock Text="{Binding UserName}"/>!</TextBlock>
, в которые можно встроить стилизованные кнопки или другие элементы управления.
Пока я не знаю решения, которое делает это возможным точно так же, как вы описываете Это. Однако вы можете в качестве обходного пути использовать несколько текстовых блоков, чтобы собрать ваше предложение воедино:
<StackPanel Orientation="Horizontal">
<TextBlock Text="Welcome, "/>
<TextBlock Text="{Binding UserName}"/>
<TextBlock Text="!"/>
</StackPanel>
Это то, что я использовал до сих пор, и, несмотря на громоздкость для ввода, кажется самым простым решением. Но как только вам понадобится интернационализация, по понятным причинам не пойдет.
Взгляните на эту библиотеку "WPFix". Это позволяет пользователю писать лямбда-выражения в XAML. Я не использовал его в производственном коде, только в демонстрационном коде. Я смог взять ширину формы, разделить ее на два и привязать значение к элементу управления. Обычно вам нужно создать класс конвертера, как вы описываете. Эта библиотека может быть тем, что вы ищете: