WPF - HeaderStringFormat не работает в Расширителе

РЕДАКТИРОВАТЬ: Для развертывания на локальном, я следовал ниже два шага:

1. Создать скрипт базы данных

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

2. Apply Migrations

Создайте простое консольное приложение, которое сначала запускает сценарий создания базы данных, а затем применяет миграции.

myDbContext.Database.Migrate();

Вот так я и заработал.

Предыдущее содержание публикации базы данных в Azure:

Требуется задача «Опубликовать SQL Azure». Требуется, чтобы у вас уже была база данных SQL Azure.

Шаги:

Шаг 1: Команда Для создания сценария миграции в конвейере сборки

Создайте задачу командной строки для создания сценария миграции:

dotnet ef migrations script -i -o %BUILD_ARTIFACTSTAGINGDIRECTORY%\migrate.sql --project EfMigrationApp.Database\EfMigrationApp.Database.csproj --startup-project EfMigrationApp\EfMigrationApp.csproj -i -o %BUILD_ARTIFACTSTAGINGDIRECTORY%\migrate.sql

Шаг 2: публикация Azure SQL в конвейере выпуска

Действие: Тип публикации: файл сценария SQL Sql-сценарий должен быть следующим:

$(System.ArtifactsDirectory)/_$(Build.DefinitionName)/drop/migrate.sql 

[1119 ] См. этот блог для пошаговых подробностей .

11
задан viggity 16 November 2008 в 19:08
поделиться

1 ответ

Первая вещь отметить является этим:

При установке свойства HeaderTemplate или HeaderTemplateSelector HeaderedContentControl свойство HeaderStringFormat проигнорировано. MSDN

Существует довольно много глюков как это в WPF, чтобы не упустить. Вы не показали, что в Вашем примере, но просто имеют в виду его. Однако я не думаю, что это - Ваша проблема.

Вторая вещь отметить состоит в том, что это не то же как:

String.Format("My string value is: {0}", myValue");

HeaderedContentControl и HeaderStringFormat используются специально для классов та реализация IFormattable. HederStringFormat форматирует заголовок, и ContentStringFormat форматирует содержание. Значение любого свойства является форматом, который передается Вашей реализации классов если IFormattable. ToString. Можно считать полный пример на MSDN. Но вот суть того, как заставить ее работать.

public class MyTestClass : IFormattable
{
    #region IFormattable Members
    public string ToString(string format, IFormatProvider formatProvider)
    {
        if(format == "n")
        {
            return "This is my formatted string";
        }
        else
        {
            return "this is my non-formatted string";
        }
    }
    #endregion
}

    <Style TargetType="{x:Type TabItem}">
        <Setter Property="HeaderStringFormat" Value="n" />
        <Setter Property="ContentStringFormat" Value="" />
    </Style>

<TabControl>
    <TabItem Header="{Binding Content, RelativeSource={RelativeSource Self}}">
        <local:MyTestClass />
    </TabItem>
</TabControl>

Этот TabItem теперь отобразится, "Это - моя отформатированная строка" в заголовке, и содержание будет, "это - моя неотформатированная строка".

Там пара вещей иметь в виду. Обычно эти свойства использовались бы только в контексте HeaderedItemsControl. HeaderStringFormat не был бы связан таким образом и вместо этого будет иметь привязку значения по умолчанию обеспеченной ItemContainer HeaderedItemsControl. Например, при установке свойства ItemsSource TabItem затем это автоматически обеспечит электричеством заголовок и довольное привязка для Вас и всего, что необходимо сделать, предоставить значение форматирования, которое Вы хотите.

Наконец, что не менее важно, я смог получить все работающее правильно с GroupBox и TabItem, но не такой удачей с расширителем, и я не уверен почему. Расширитель обрабатывает ContentStringFormat правильно, но не HeaderContentStringFormat. Это удивляет рассмотрение, что оба наследовались HeaderContentControl.

11
ответ дан 3 December 2019 в 09:42
поделиться
Другие вопросы по тегам:

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