Почему вы не можете привязать текстовое оформление в Silverlight? - PullRequest
3 голосов
/ 31 августа 2011

У меня есть 2 TextBlocks в моем определении Silverlight .XAML.Я хочу, чтобы второй TextBlock эмулировал поведение первого TextBlock.Самый простой способ, который я нашел, - это привязка данных к элементам.Это все хорошо, но я получаю следующую ошибку при попытке привязки к свойству TextDecoration:

Невозможно привести объект типа 'System.Windows.Data.Binding' к типу 'System.Windows.TextDecorationCollection '.

Для справки мой XAML выглядит следующим образом:

<TextBlock x:Name="TextBlock1" Text="Booya" />
<TextBlock x:Name="TextBlock2" Text="AnotherBooya" FontSize="{Binding FontSize, ElementName=TextBlock1}" FontFamily="{Binding FontFamily, ElementName=TextBlock1}" TextDecorations="{Binding TextDecorations, ElementName=TextBlock1}"/>

Если я удаляю TextDecorations = "{Binding TextDecorations, ElementName = txt_FanName}"часть, то код компилируется просто отлично.Это потому, что свойство TextDecoration может принимать значение Null, а другие (т.е. FontWeight) - нет?

Мой вопрос: Почему это так??И есть ли обходные пути (кроме ручной установки этого в коде позади)?

Ответы [ 2 ]

3 голосов
/ 01 сентября 2011

Это похоже на ошибку в Designer.Во время выполнения привязка работает нормально.Тем не менее, это довольно неприятная ошибка при проектировании, потому что дизайн становится бесполезным.

Один из найденных мной обходных путей - создать преобразователь «Identity», то есть преобразователь, который просто возвращает входное значение без изменений: -

public class IdentityConverter : IValueConverter
{

    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        return value;
    }

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        return value;
    }
}

Имейте один из них в локальном узле Ресурсов и используйте его в привязке.Исключение не исчезает сразу, но, запустив приложение и вернувшись к дизайну, дизайнер кажется достаточно счастливым для рендеринга, но синяя линия под связыванием остается.Не нужно заниматься дальнейшим проектированием, вы можете удалить этот кладж.

0 голосов
/ 24 марта 2012

Я добавил привязку для TextDecorations в код инициализации (например, конструктор) для моего элемента управления, в котором TextBlock находится следующим образом:

//The following are because of bug in the XAML designer
Binding  binding = new Binding("fontUnderln"); // fontUnderln is a property in my DataContext
txtBlockDlgImgTiltle.SetBinding(TextBlock.TextDecorationsProperty, binding);
txtBlockDlgImgText.SetBinding(TextBlock.TextDecorationsProperty, binding);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...