Почему мои однострочные и многострочные кнопки выглядят по-разному, когда они оба отключены? - PullRequest
0 голосов
/ 11 апреля 2019

Вот XAML для окна, содержащего две кнопки, обе отключены. Один из них был сделан многострочным путем установки содержимого кнопки на StackPanel, содержащую два TextBlocks.

<Window x:Class="MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800">
    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="*" />
            <ColumnDefinition Width="*" />
        </Grid.ColumnDefinitions>
        <Button Grid.Column="0" Content="Single line" IsEnabled="False" />
        <Button Grid.Column="1" IsEnabled="False">
            <StackPanel>
                <TextBlock HorizontalAlignment="Center">Double</TextBlock>
                <TextBlock HorizontalAlignment="Center">Line</TextBlock>
            </StackPanel>
        </Button>
    </Grid>
</Window>

Вот как это выглядит на моей машине, когда я запускаю программу:

enter image description here

Почему текст на одной кнопке отличается от другого? На однострочной кнопке текст становится более блеклым. Я хочу, чтобы текст выглядел одинаково на обеих кнопках.

Дополнительно:

  • Я хочу сделать это исключительно на XAML.

  • Текст должен быть центрирован внутри кнопки, как показано (автоматически рамкой, без необходимости вручную размечать его, вставляя неразрывные пробелы или тому подобное). В частности, решения, которые приводят к тому, что левый край буквы «L» выравнивается по вертикали с левым краем буквы «D» в строке «Double», являются неприемлемыми. (Таким образом, использование атрибута «Содержимое» во второй кнопке, но встраивание &#xa; в текст не является жизнеспособным решением, поскольку оно вызывает этот эффект.)

  • Я не хочу вставлять информацию о стиле в мой XAML. Решения, которые включают вставку в определение того, как выглядит отключенная кнопка, неприемлемы; Я хочу, чтобы обе кнопки просто выглядели так, как должна выглядеть отключенная кнопка по умолчанию в моей операционной системе, без необходимости явно указывать, что это значит. Декларативные решения, которые включают в себя указание XAML использовать любой стиль, который обычно применяется к тексту в отключенной кнопке, - это хорошо, если мне не нужно явно указывать, как выглядит этот стиль.

Ответы [ 3 ]

1 голос
/ 11 апреля 2019

Я установил последнюю версию .NET Framework Developer Pack, а затем перезагрузил компьютер. Когда машина вернулась, я больше не мог воспроизвести проблему ни в моем примере проекта, ни в реальном проекте, где я впервые увидел проблему. Я не знаю, была ли проблема решена путем обновления .NET Framework Developer Pack или путем перезапуска.

Поскольку я не знаю, что в конечном итоге вызвало проблему, или какое действие я предпринял, это было то, что исправило ее, я не собираюсь отмечать это как принятый ответ, но я предлагаю его в случае, если это окажется полезным для кого-либо еще. Возможно, кто-то может предложить объяснение поведения, которое я первоначально видел.

0 голосов
/ 11 апреля 2019

То, что у вас есть (также), дает ожидаемый для меня результат при использовании vs2017 на win10.

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

    <Button Grid.Column="0" Content="Single line" IsEnabled="False" />
    <Button Grid.Column="1" IsEnabled="False">
        <TextBlock Style="{x:Null}" TextAlignment="Center">Double<LineBreak/>Line</TextBlock>
    </Button>

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

0 голосов
/ 11 апреля 2019

Это ответ, поэтому я могу добавить картинку для вас.

Я только что скопировал XAML, он отлично работает, они выглядят одинаково для меня. Вам необходимо проверить, есть ли у вас какие-либо стили, определенные где-либо, которые могут вызвать такое поведение (во время выполнения выглядит одинаково)

enter image description here

Обновление:

<Button Grid.Column="1" IsEnabled="False">
    <TextBlock HorizontalAlignment="Center">
        <Run>Double</Run>
        <LineBreak/>
        <Run>Line</Run>
    </TextBlock>
</Button>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...