2017-01-28 2 views
0

Ich habe einen benutzerdefinierten WindowChrome-Stil für meine WPF-App (von hier riss: http://www.bdevuyst.com/wpf-custom-title-bar-and-taskbar/).WindowChrome - Klicken Sie nicht auf Schaltflächen in der Titelleiste

-Code hier:

<ResourceDictionary 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"> 

    <!-- Simple style without anything to remove the title bar --> 
    <Style x:Key="Style.Window.WindowStyleNoneWithTaskbar.Base" TargetType="{x:Type Window}"> 
     <Setter Property="shell:WindowChrome.WindowChrome" > 
      <Setter.Value> 
       <shell:WindowChrome GlassFrameThickness="0" /> 
      </Setter.Value> 
     </Setter> 
     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="{x:Type Window}"> 
        <Border Background="{TemplateBinding Background}" BorderBrush="{TemplateBinding Foreground}" BorderThickness="1" > 
         <ContentPresenter Content="{TemplateBinding Content}" /> 
        </Border> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
    </Style> 

    <!-- Simple style with system buttons upper right --> 
    <Style TargetType="{x:Type Window}" BasedOn="{StaticResource Style.Window.WindowStyleNoneWithTaskbar.Base}" x:Key="Style.Window.WindowStyleNoneWithTaskbar"> 
     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="{x:Type Window}"> 
        <Border Background="{TemplateBinding Background}" BorderBrush="{TemplateBinding Foreground}" BorderThickness="1"> 
         <Grid> 
          <ContentPresenter 
           Content="{TemplateBinding Content}" /> 

          <Canvas Grid.Column="2" HorizontalAlignment="Right" Margin="0,6,10,0" VerticalAlignment="Top" > 
           <Button x:Name="MinimizeButton" Style="{DynamicResource Style.Button.Core.Transparent}" Command="{Binding Source={x:Static SystemCommands.MinimizeWindowCommand}}" Width="24" Height="24" Canvas.Right="55" WindowChrome.IsHitTestVisibleInChrome="True" ToolTip="Close" > 
            <Rectangle Margin="2" Fill="{DynamicResource appbar.reduce}" Opacity=".5" Width="15" Height="15" /> 
           </Button> 
           <Button x:Name="NormalizeButton" Style="{DynamicResource Style.Button.Core.Transparent}" Visibility="Collapsed" Command="{Binding Source={x:Static SystemCommands.RestoreWindowCommand}}" Width="24" Height="24" Canvas.Right="30" WindowChrome.IsHitTestVisibleInChrome="True" ToolTip="Restore" > 
            <Rectangle Margin="2" Fill="{DynamicResource appbar.normal}" Opacity=".5" Width="15" Height="15" /> 
           </Button> 
           <Button x:Name="MaximizeButton" Style="{DynamicResource Style.Button.Core.Transparent}" Command="{Binding Source={x:Static SystemCommands.MaximizeWindowCommand}}" Width="24" Height="24" Canvas.Right="30" WindowChrome.IsHitTestVisibleInChrome="True" ToolTip="Maximize" > 
            <Rectangle Margin="2" Fill="{DynamicResource appbar.maximize}" Opacity=".5" Width="15" Height="15" /> 
           </Button> 
           <Button x:Name="CloseButton" Style="{DynamicResource Style.Button.Core.Transparent}" Command="{Binding Source={x:Static SystemCommands.CloseWindowCommand}}" Width="24" Height="24" Canvas.Right="5" WindowChrome.IsHitTestVisibleInChrome="True" ToolTip="Close" > 
            <Rectangle Margin="2" Fill="{DynamicResource appbar.close}" Opacity=".5" Width="15" Height="15" /> 
           </Button> 
          </Canvas> 
         </Grid> 
        </Border> 
        <ControlTemplate.Triggers> 
         <Trigger Property="WindowState" Value="Maximized"> 
          <Setter Property="Visibility" Value="Collapsed" TargetName="MaximizeButton" /> 
          <Setter Property="Visibility" Value="Visible" TargetName="NormalizeButton" /> 
         </Trigger> 

        </ControlTemplate.Triggers> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
    </Style> 
</ResourceDictionary> 

I entfernt Verweise auf „Shell“, weil es veraltet ist, aber aus irgendeinem Grund kann ich nicht die Schaltflächen in der Titelleiste klicken. Ich habe die Beispiellösung von der Website heruntergeladen, die ich verlinkt habe, und die Schaltflächen funktionierten von mir.

Als nächstes fügte ich die Verweise auf "Shell" zurück, aber ich konnte immer noch nicht auf die Schaltflächen klicken.

Ich bin mir nicht sicher, was ich hier falsch mache. Ich habe die Beispiellösung in meinem Projekt ziemlich vollständig kopiert und es immer noch hat nicht funktioniert. Ich habe IsHitTestVisibleInChrome auf "True" für jede Schaltfläche festgelegt, aber es macht keinen Unterschied.

Ich habe mehrere andere, viel einfachere Ansätze ausprobiert, mit grundlegenden Tasten und ohne Styling, alles ohne Erfolg. Ich fühle mich, als würde ich hier etwas Offensichtliches vermissen.

Antwort

1

Es ist Ihre Befehl Bindungen, die das Problem hier sind. Binden Sie die Befehlseigenschaften nicht. setzen sie einfach:

<Canvas Grid.Column="2" HorizontalAlignment="Right" Margin="0,6,10,0" VerticalAlignment="Top" > 
    <Button x:Name="MinimizeButton" Style="{DynamicResource Style.Button.Core.Transparent}" Command="{x:Static SystemCommands.MinimizeWindowCommand}" Width="24" Height="24" Canvas.Right="55" WindowChrome.IsHitTestVisibleInChrome="True" ToolTip="Close" > 
     <Rectangle Margin="2" Fill="{DynamicResource appbar.reduce}" Opacity=".5" Width="15" Height="15" /> 
    </Button> 
    <Button x:Name="NormalizeButton" Style="{DynamicResource Style.Button.Core.Transparent}" Visibility="Collapsed" Command="{x:Static SystemCommands.RestoreWindowCommand}" Width="24" Height="24" Canvas.Right="30" WindowChrome.IsHitTestVisibleInChrome="True" ToolTip="Restore" > 
     <Rectangle Margin="2" Fill="{DynamicResource appbar.normal}" Opacity=".5" Width="15" Height="15" /> 
    </Button> 
    <Button x:Name="MaximizeButton" Style="{DynamicResource Style.Button.Core.Transparent}" Command="{x:Static SystemCommands.MaximizeWindowCommand}" Width="24" Height="24" Canvas.Right="30" WindowChrome.IsHitTestVisibleInChrome="True" ToolTip="Maximize" > 
     <Rectangle Margin="2" Fill="{DynamicResource appbar.maximize}" Opacity=".5" Width="15" Height="15" /> 
    </Button> 
    <Button x:Name="CloseButton" Style="{DynamicResource Style.Button.Core.Transparent}" Command="{x:Static SystemCommands.CloseWindowCommand}" Width="24" Height="24" Canvas.Right="5" WindowChrome.IsHitTestVisibleInChrome="True" ToolTip="Close" > 
     <Rectangle Margin="2" Fill="{DynamicResource appbar.close}" Opacity=".5" Width="15" Height="15" /> 
    </Button> 
</Canvas> 

Sie werden auch einen Befehl benötigen für jeden der Befehle Bindung und führen sie programmatisch durch @Louis Kottmann hier vorgeschlagen wie:

In WPF, can I have a borderless window that has regular minimize, maximise and close buttons?

+0

Sie für die Antwort danken. Ich werde es versuchen, wenn ich heute Nacht nach Hause komme –

+0

Das hat es behoben. Außerdem habe ich die Codebehind-Befehlsbindungen nicht hinzugefügt, wie ich sollte. Ich bin das im ViewModel gewohnt. Vielen Dank! –

Verwandte Themen