. NET хранит все строки как последовательность кодовых блоков UTF-16. (Это достаточно близко для «символов Unicode» для большинства целей.)
К счастью для вас, Unicode был разработан таким образом, что значения ASCII сопоставляются с одним и тем же номером в Unicode, поэтому после того, как вы преобразовали каждый символ в целое число, вы можете просто проверить, находится ли он в диапазоне ASCII. Обратите внимание, что вы можете использовать неявное преобразование из char
в int
- нет необходимости вызывать метод преобразования:
string text = "Here's some text including a \u00ff non-ASCII character";
foreach (char c in text)
{
int unicode = c;
Console.WriteLine(unicode < 128 ? "ASCII: {0}" : "Non-ASCII: {0}", unicode);
}
Для большинства элементов управления вы устанавливаете его высоту и ширину на Авто
в XAML, и он будет соответствовать размеру его содержимого.
В коде вы устанавливаете ширина / высота до double.NaN
. Для получения подробной информации см. FrameworkElement.Width , особенно раздел «примечания».
У меня была подобная проблема, когда я указал ширину окна, но высота была установлена на Auto
. У дочерней DockPanel
VerticalAlignment
было установлено значение Top, а у окна VerticalContentAlignment было установлено значение Top, но окно все равно было намного выше содержимого.
Используя Snoop, я обнаружил, что ContentPresenter
внутри окна (часть окна, а не то, что я туда поместил) имеет VerticalAlignment
, установленный на Stretch
и не может быть изменен без повторного рассмотрения всего окна!
После многих разочарований я обнаружил свойство SizeToContent
- вы можете использовать его, чтобы указать, хотите ли вы, чтобы окно имело вертикальный, горизонтальный или оба размера, в соответствии с размером содержимого - теперь все хорошо выравнивается, я просто не могу поверить, что мне понадобилось столько времени, чтобы найти это свойство!