WPF Button DataTrigger неправильно устанавливает содержимое - PullRequest
0 голосов
/ 27 апреля 2020

Я создаю класс, унаследованный от Window, который добавляет некоторые дополнительные функции к панели заголовков.

Я попытался воссоздать строку заголовка Windows 10, используя этот XAML в качестве минимизации, восстановления Кнопки / развернуть и закрыть:

            <Button x:Name="CloseButton"
                    Click="CloseButton_Click"
                    HorizontalAlignment="Center"
                    VerticalAlignment="Center"
                    Content="&#xE106;" FontFamily="Segoe MDL2 Assets" FontSize="10" Padding="15,10" Background="Transparent" BorderBrush="Transparent" Foreground="White"
                    DockPanel.Dock="Right">
                <Button.Style>
                    <Style TargetType="{x:Type Button}"/>
                </Button.Style>
            </Button>

            <Button x:Name="MaximizeButton"
                    Click="MaximizeButton_Click"
                    DockPanel.Dock="Right"
                    HorizontalAlignment="Center"
                    VerticalAlignment="Center"
                    FontFamily="Segoe MDL2 Assets" FontSize="10" Padding="15,10" Background="Transparent" BorderBrush="Transparent" Foreground="White">
                <Button.Style>
                    <Style TargetType="{x:Type Button}">
                        <Setter Property="Button.Content" Value="&#xE739;" />
                        <Style.Triggers>
                            <DataTrigger Binding="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Window}}, Path=WindowState}" Value="Maximized">
                                <Setter Property="Button.Content" Value="&#xE923;" />
                            </DataTrigger>
                            <DataTrigger Binding="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type local:MainWindow}}, Path=WindowState}" Value="Normal">
                                <Setter Property="Button.Content" Value="&#xE739;" />
                            </DataTrigger>
                        </Style.Triggers>
                    </Style>
                </Button.Style>
            </Button>

            <Button x:Name="MinimizeButton"
                    Content="&#xE949;"
                    Click="MinimizeButton_Click"
                    DockPanel.Dock="Right"
                    HorizontalAlignment="Center"
                    VerticalAlignment="Center"
                    FontFamily="Segoe MDL2 Assets" FontSize="10" Padding="15,15,15,5" Background="Transparent" BorderBrush="Transparent" Foreground="White">
                <Button.Style>
                    <Style TargetType="{x:Type Button}"/>
                </Button.Style>
            </Button>

Проблема в том, что, хотя моя кнопка «Развернуть» правильно отображается следующим образом, изначально:

button default appearance

Если я щелкну по нему, оно превратится в следующее:

button after clicking

Что похоже на недопустимый символ? Это действительный символ в соответствии с Segoe UI MDL2: рекомендации по значкам .

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

after restore click

Что-то не так с моим Style или DataTrigger?

You Заметьте, что я пробовал AncestorType={x:Type Window}} и AncestorType={x:Type local:MainWindow}}, MainWindow как мой класс, но ни один из них не имел никакого значения.

1 Ответ

0 голосов
/ 27 апреля 2020

Я понял, что устанавливаю Button.Content в методе MaximizeButton_Click, о котором я забыл. Удаление этого и все работает как положено.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...