Как делают меня: создать точку останова Используя условия? [Экспресс C#]

Элемент управления со свойством Text может принимать только строку и отображается определенным образом, обработанным этим элементом управления. Примерами таких элементов управления являются TextBlock и TextBox .

Элементы управления со свойством Content могут иметь буквально любой object, установленный для этого свойства. Эти элементы управления обычно передают значение в свойство Content в ContentPresenter . В документации ContentPresenter Class есть этот соответствующий блок:

ContentPresenter использует следующую логику для отображения контента:

  • Если свойство ContentTemplate в ContentPresenter установлен, ContentPresenter применяет этот DataTemplate к свойству Content и отображает результирующий UIElement и его дочерние элементы, если таковые имеются. Для получения дополнительной информации об объектах DataTemplate см. Обзор шаблонов данных.
  • Если свойство ContentTemplateSelector в ContentPresenter установлено, ContentPresenter применяет соответствующий DataTemplate к свойству Content, и в результате отображаются результирующий UIElement и его дочерние элементы, если таковые имеются.
  • Если существует DataTemplate, связанный с типом Content, ContentPresenter применяет этот DataTemplate к свойству Content и отображает результирующий UIElement и его дочерние элементы, если таковые имеются.
  • Если Content является объектом UIElement, отображается UIElement. Если элемент UIElement уже имеет родителя, возникает исключение.
  • Если существует TypeConverter, который преобразует тип контента в UIElement, ContentPresenter использует этот TypeConverter, и отображается результирующий UIElement.
  • Если существует TypeConverter, который преобразует тип Content в строку, ContentPresenter использует этот TypeConverter и создает TextBlock для хранения этой строки. Отображается текстовый блок.
  • Если содержимое является элементом XmlElement, значение свойства InnerText отображается в TextBlock.
  • ContentPresenter вызывает метод ToString для Content и создает TextBlock для хранения строки, возвращаемой ToString. Отображается текстовый блок.

В случае класса TextBlock у вас есть возможность либо установить свойство Text, либо установить свойство Inlines. Установка Text будет просто отображать текст. Настройка Inlines (которая используется по умолчанию, если вы помещаете содержимое в тело тега xaml) позволяет форматировать текст. Например, вы можете использовать Run с его FontWeight , установленным в Bold, чтобы сделать определенное слово или фразу жирным в предложении. Вы можете использовать LineBreak , чтобы вставить новую строку. Вы даже можете использовать InlineUIContainer для вставки пользовательских элементов интерфейса в текст. Все, что происходит от класса Inline , может входить в эту коллекцию.

TextBlock предназначен для простых бит форматированного текста. Если вам нужны еще более мощные функции стиля документа, вы можете обратиться к FlowDocument , который используется такими элементами управления, как RichTextBox , FlowDocumentScrollViewer и FlowDocumentReader [ 1 125]. [1 139]

Что касается разницы между и something, то на самом деле разницы нет. Это просто два разных способа, которыми вы можете установить свойства для чего-либо в файле xaml. Вторая версия обычно используется только тогда, когда вам нужно определить дополнительные элементы внутри сеттера.

6
задан Kredns 23 June 2009 в 03:57
поделиться

3 ответа

Подобно @Relster, у меня есть фрагмент кода со следующими изменениями

#if DEBUG
    if( node.Name == "Book" )
        System.Diagnostics.Debugger.Break();
#endif

Where node.Name == "Book" в зависимости от условия, которое я хочу проверить . Обертка #if DEBUG гарантирует, что проверки никогда не дойдут до выпуска кода.

Это также намного быстрее, чем использование условных точек останова в Visual Studio. Когда вы используете встроенную условную bp, визуальная студия должна проникнуть в приложение, приостановить все потоки, оценить выражение и определить, истинно ли оно каждый раз, когда оно достигает точки останова. В тесном цикле это может быть разница между почти полной производительностью выполнения и бегом со сканированием.

19
ответ дан 8 December 2019 в 04:55
поделиться

Вы также можете сделать это в VS 2008. Я уверен, что есть много способов сделать это, но один из них - щелкнуть правой кнопкой мыши красную точку на краю существующей точки останова и выбрать условие ... , а затем просто задать ему условие, которое оценивает на bool , и он сломается, только если это правда. Условный оператор должен иметь доступ ко всему, что находится в области видимости в строке, где установлена ​​точка останова.

В этом контекстном меню также есть другие параметры, которые позволяют фильтровать то, что вызовет разрыв (например, только определенные потоки), break в зависимости от количества срабатываний точки останова, запускать макросы при достижении точки останова и т. д.

4
ответ дан 8 December 2019 в 04:55
поделиться

Другой способ сделать это - создать свои собственные условия и использовать вызов:

System.Diagnostics.Debugger.Break(); 

Хотя он может быть не таким сложным, как способ установки точек останова в VS2010, вы можете получить тот же эффект с минимальными затратами кода. Просто не забудьте убрать эти вещи при сборке кода выпуска.

Примечание: в VS2008 и VS2005 вы можете установить условную точку останова, установив обычную точку останова (F9 или дважды щелкнув по желобу), а затем щелкнув правой кнопкой мыши по этой точке останова установить «условие ...». Возможность устанавливать условные точки останова НЕ доступна в VS2008 Express Edition.

1
ответ дан 8 December 2019 в 04:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: