2012-09-16 10 views
9

Tengo la aplicación más sencilla jamás: Ventana individual con un solo botón de alternar:ToggleButton no muestra ningún estado

<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> 

Cuando ahora hago clic en el botón de activación, realmente no pasa nada. Cuando configuro el controlador de eventos para los eventos Checked y Unchecked, y luego hago clic en el botón, primero se activa el Checked y luego el Unchecked. Entonces el botón parece funcionar correctamente ...

Estoy compilando para .NET 4.5 y estoy usando Windows 8 RTM.

¿Este comportamiento está relacionado con el estilo de Windows 8 de botones de visualización (sin borde "3D")? ¿Alguien puede confirmar?

ACTUALIZA 1 que compone una imagen para mostrar lo que quería decir:

Windows 8 vs Windows 7 toggle button

Como se ve, en Windows 8 "no pasa nada" cuando se hace clic en el botón de activación, simplemente no se "alterna". Esto parece ser un error, en relación con las ventanas 8 estilo de botones que muestran ...

actualización: 30 Mayo 2013: Hay una revisión al tocar un botón: http://support.microsoft.com/kb/2805222
Ver Edición # 5 bajo WPF
Lamentablemente, no soluciona el problema :(

+1

¿Qué es exactamente lo que quiere decir con "no pasa nada"? ¿El botón no aparece presionado cuando haces clic en él? Si ese es el caso, entonces podría ser algo relacionado con Windows 8 como usted dijo. –

+0

sí ... ¿a qué te refieres con que no pasa nada? ¿El botón no baja? – Seva

+0

tal vez debería definir un tamaño para el botón de alternar – Seva

Respuesta

5

Esto es un defecto confirmado en WPF. La solución consiste en aplicar el estilo al control, aunque el grupo de productos puede considerar una solución. por favor, póngase en contacto con el soporte de Microsoft.

+0

[ya lo hice hace algún tiempo] (https://connect.microsoft.com/VisualStudio/feedback/details/763597/togglebutton-doesnt-show-any-state) ya que nadie quería responder mi pregunta – GameScripting

4

Para todo el mundo que quieren algo de código para empezar, se puede tomar el código Solía ​​estilo de mis controles:

<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> 
Cuestiones relacionadas