2012-09-14 12 views
6

Estoy intentando crear una plantilla de botón simple en la que el botón normalmente se ve como una sola línea horizontal, pero cuando pasa el mouse, el botón mostrará un relleno de color "rectangular" detrás de él. Este es el código que tengo, pero parece que no puedo disparar los factores desencadenantes.¿Cómo puedo agregar un botón a la barra de subtítulos de WPF mientras uso la ventana personalizada de cromo?

<Window x:Class="TestStylingWPF.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> 

    <WindowChrome.WindowChrome> 
     <WindowChrome CaptionHeight="36" GlassFrameThickness="0 0 0 1" ResizeBorderThickness="5" /> 
    </WindowChrome.WindowChrome> 

    <Grid> 
     <Grid.RowDefinitions> 
      <RowDefinition Height="36" /> 
      <RowDefinition Height="*" /> 
     </Grid.RowDefinitions> 

     <Button Height="36" Width="36" 
        HorizontalAlignment="Center" VerticalAlignment="Center" 
       Grid.Row="0"> 
      <Button.Template> 
       <ControlTemplate> 
        <Grid> 
         <Rectangle x:Name="PART_ButtonBackgroundRectangle" Fill="LightGray" Width="36" Height="36" Opacity="0" /> 
         <Path x:Name="PART_ButtonPath" Data="M10,26 L26,26" Stroke="DarkGray" StrokeThickness="1.5" /> 
        </Grid> 
        <ControlTemplate.Triggers> 
         <Trigger SourceName="PART_ButtonBackgroundRectangle" Property="IsMouseOver" Value="True"> 
          <Setter TargetName="PART_ButtonBackgroundRectangle" Property="Opacity" Value="1" /> 
         </Trigger> 
        </ControlTemplate.Triggers> 
       </ControlTemplate> 
      </Button.Template> 
     </Button> 
    </Grid> 
</Window> 

¿Alguien sabe por qué mi gatillo no funcionará, o quizás una mejor manera de hacerlo? Soy un poco nuevo en WPF y me gustaría refactorizarlo (para usarlo en muchos botones), pero no estoy seguro de cómo hacerlo.

Actualización: Ok, supongo que parece ser porque el botón está dentro de la barra de título de la ventana. ¿Hay una buena forma de evitar esto? ¿Tal vez una forma de establecer la prioridad de clic/desplazamiento al botón?

+1

funciona bien para mí –

+1

copiado en un proyecto WPF vacía su código funciona bien. Entonces su problema está en otro lado ... – nemesv

+0

Actualicé mi respuesta y el código con nueva información. –

Respuesta

14

Es necesario configurar Información de puntos visibles de su botón, tales como:

shell:WindowChrome.IsHitTestVisibleInChrome="True" 
+0

Gracias, funcionó perfectamente. –

+0

@ChrisCovert ¿Pero cómo? En un proyecto 4.5.2, si agrego una referencia a 'xmlns: shell =" clr-namespace: Microsoft.Windows.Shell; assembly = Microsoft.Windows.Shell "' y trato de establecer la propiedad 'shell: WindowChrome.IsHitTestVisibleInChrome = "True" 'en mis botones, aparece el error *" El nombre "WindowChrome" no existe en el espacio de nombres "http://schemas.microsoft.com/winfx/2006/xaml/presentation/shell""* –

Cuestiones relacionadas