2014-09-11 3 views
2

Я новичок в WPF и нахожу удивительно скудную информацию о том, что, по моему мнению, является основной проблемой, которая заключается в использовании целого числа для текста в TextBlock. Вот как я определил свои ресурсы в app.xaml:Преобразование типа в xaml

xmlns:sys="clr-namespace:System;assembly=mscorlib" 

и

<Application.Resources> 
    <sys:Int32 x:Key="MyResourceName">-1</sys:Int32> 
</Application.Resources> 

Это правильно определена и функциональная, так как VS находит в том, когда я пытаюсь использовать его в простой TextBlock объекта:

<TextBlock Name="MyTextboxName" Text="{DynamicResource MyResourceName}" /> 

Проблема заключается в том, что он генерирует ошибку, объясняя, конечно, что он не может преобразовать целое число в строку по умолчанию. Обычно я бы бросил его, прежде чем я понял, что набираю текст, но я не знаю, как отличить его от xaml. Я считал обязательным, но он, похоже, не сфокусирован на пользовательских переменных так сильно и будет более громоздким, поэтому я посмотрел на конвертеры. Я также мало узнал о преобразовании целых чисел в строки в xaml. Если нет решения, я могу просто сделать строки переменных и преобразовать их в целые числа или плавать только для конверсий, а затем преобразовать их обратно, но это будет серьезной (и грязной) болью.

Edit: Чтобы было ясно, я действительно задаю два вопроса:

  1. имеет тип преобразования возможный только в XAML?
  2. Есть ли конвертер по умолчанию для преобразования одного примитивного типа в другой?
+0

Хорошо, как насчет использования ярлыка вместо этого и установите его свойство 'Content'? Вы также можете установить его свойство ContentStringFormat. – Clemens

ответ

2

Там уже находится в рамках общей структуры TypeConverter, которая преобразует Int в строку, проблема здесь в том, что она не применяется, если вы используете StaticResource или DynamicResource.

Вы просто должны выполнить привязку к ресурсу:

<TextBlock Name="MyTextboxName" Text="{Binding Source={StaticResource MyResourceName}}" /> 

Вы не можете использовать DynamicResource хотя.

+0

Это дает мне ошибку в том, что нужно указать указанный путь. Я вообще не мог найти ничего, где путь не был элементом Xaml, поэтому я не знаю, как привязка будет работать на ресурсе. – 2014-09-11 07:50:22

+0

Вам не нужен Путь для привязки, вы напрямую привязываетесь к Source. Из MSDN: «Чтобы привязываться ко всему объекту, вам не нужно указывать свойство Path». –

+0

Я читал больше о привязке, чтобы узнать, когда я могу использовать расширения разметки (например, как у вас есть два из них вместе), и я это понимаю сейчас. – 2014-09-15 18:00:46

0

Вам необходимо написать конвертер и использовать его для преобразования. Затем вы добавляете его в качестве ресурса.

TypeConverters and XAML

+0

Это просто казалось примитивным преобразованием, поскольку int to string должно иметь существующий конвертер. Я решил написать один (сохраненный в отдельном файле .cs). Visual Studio может найти класс, но я не могу получить доступ к каким-либо методам в нем. Класс наследует и реализует от IValueConverter. Есть ли какие-то особые вещи, которые я могу пропустить, которые делают его «видимым» для Xaml? – 2014-09-11 07:38:06

Смежные вопросы