ToggleButton не показывает никакого состояния

У меня самое простое приложение: одно окно с одной кнопкой-переключателем:

<Window x:Class="WpfApplication1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <ToggleButton Content="This is my ToggleButton" />
    </Grid>
</Window>

Когда я теперь нажимаю на кнопку переключения, на самом деле ничего не происходит. Когда я настраиваю обработчик событий для событий Checked и Unchecked, а затем нажимаю кнопку, сначала срабатывает Checked, а затем Unchecked. Так что кнопка вроде работает правильно...

Я компилирую в .NET 4.5 и использую Windows 8 RTM.

Связано ли это поведение со стилем отображения кнопок в Windows 8 (без "трехмерной" границы)? Кто-нибудь может подтвердить?

ОБНОВЛЕНИЕ 1 Я сделал изображение, чтобы показать, что я имел в виду:

Кнопка переключения между Windows 8 и Windows 7

Как видите, в Windows 8 "ничего не происходит" при нажатии на кнопку переключения, она просто не "переключается". Похоже, это ошибка, связанная со стилем отображения кнопок Windows 8...

ОБНОВЛЕНИЕ: 30 мая 2013 г. Доступно исправление: http://support.microsoft.com/kb/2805222
См. проблему № 5 в WPF
К сожалению, это не решает проблему для меня :(


person GameScripting    schedule 16.09.2012    source источник
comment
Что именно вы подразумеваете под словом ничего не происходит? Кнопка не появляется нажатой, когда вы нажимаете на нее? Если это так, то это может быть связано с Windows 8, как вы сказали.   -  person Tejas Sharma    schedule 17.09.2012
comment
да... что значит ничего не происходит? Кнопка не пропадает?   -  person alansiqueira27    schedule 17.09.2012
comment
возможно, вам следует определить размер кнопки переключения   -  person alansiqueira27    schedule 17.09.2012
comment
Я столкнулся с той же проблемой. Очень раздражает... Я проголосовал за ваш пост в Microsoft Connect   -  person Andrey Morozov    schedule 18.11.2012
comment
Есть ли какое-нибудь исправление для этого выхода сегодня? У меня та же проблема (не только ToggleButton), но обычные кнопки плохо выглядят в моем приложении WPF в Windows 8.   -  person sam1589914    schedule 18.01.2013


Ответы (2)


Это подтвержденный дефект в WPF. Обходной путь заключается в соответствующем оформлении элемента управления, хотя группа разработчиков может рассмотреть возможность исправления. Чтобы запросить исправление, обратитесь в службу поддержки Microsoft.

person Jon Burchel    schedule 25.09.2012
comment
уже делал это некоторое время назад так как никто не хотел отвечать на мой вопрос - person GameScripting; 25.09.2012

Для всех, кто хочет начать с некоторого кода, вы можете взять код, который я использовал для стилизации своих элементов управления:

<Application.Resources>

        <!-- Toogle button fix (includes custom button + toggle button style) -->
        <Style TargetType="{x:Type Button}">
            <Setter Property="Background" Value="{StaticResource ButtonNormalBackground}"/>
            <Setter Property="BorderBrush" Value="{StaticResource ButtonNormalBorder}"/>
            <Setter Property="BorderThickness" Value="1"/>
            <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}"/>
            <Setter Property="HorizontalContentAlignment" Value="Center"/>
            <Setter Property="VerticalContentAlignment" Value="Center"/>
            <Setter Property="Padding" Value="1"/>
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="{x:Type Button}">
                        <Border BorderThickness="1" BorderBrush="#FFA4A4A4">
                            <Grid>
                                <Rectangle x:Name="Rectangle_Background" Fill="#FFEDEDED" />
                                <ContentPresenter x:Name="ContentPresenter_Content" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" Margin="{TemplateBinding Padding}" RecognizesAccessKey="True" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>
                            </Grid>
                        </Border>
                        <ControlTemplate.Triggers>
                            <Trigger Property="IsEnabled" Value="false">
                                <Setter TargetName="Rectangle_Background" Property="Fill" Value="#f7f7f7"/>
                                <Setter TargetName="ContentPresenter_Content" Property="Opacity" Value="0.5"/>
                            </Trigger>
                            <Trigger Property="IsMouseOver" Value="True">
                                <Setter TargetName="Rectangle_Background" Property="Fill" Value="#e0e0e0" />
                            </Trigger>
                        </ControlTemplate.Triggers>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>

        <Style TargetType="{x:Type ToggleButton}">
            <Setter Property="Background" Value="{StaticResource ButtonNormalBackground}"/>
            <Setter Property="BorderBrush" Value="{StaticResource ButtonNormalBorder}"/>
            <Setter Property="BorderThickness" Value="1"/>
            <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}"/>
            <Setter Property="HorizontalContentAlignment" Value="Center"/>
            <Setter Property="VerticalContentAlignment" Value="Center"/>
            <Setter Property="Padding" Value="1"/>
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="{x:Type ToggleButton}">
                        <Border BorderThickness="1" BorderBrush="#FFA4A4A4">
                            <Grid>
                                <Rectangle x:Name="Rectangle_Background" Fill="#FFEDEDED" />
                                <ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" Margin="{TemplateBinding Padding}" RecognizesAccessKey="True" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>
                            </Grid>
                        </Border>
                        <ControlTemplate.Triggers>
                            <Trigger Property="IsEnabled" Value="false">
                                <Setter TargetName="Rectangle_Background" Property="Fill" Value="#ADADAD"/>
                            </Trigger>
                            <Trigger Property="IsMouseOver" Value="True">
                                <Setter TargetName="Rectangle_Background" Property="Fill" Value="#e0e0e0" />
                            </Trigger>
                            <Trigger Property="IsChecked" Value="true">
                                <Setter Property="Fill" TargetName="Rectangle_Background" Value="#bee6fd"/>
                            </Trigger>
                        </ControlTemplate.Triggers>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>

    </Application.Resources>
person GameScripting    schedule 12.02.2013