2017-01-28 7 views
0

У меня есть собственный стиль WindowChrome для моего приложения WPF (отрывается отсюда: http://www.bdevuyst.com/wpf-custom-title-bar-and-taskbar/).WindowChrome - Не удается щелкнуть кнопки в заголовке

код здесь:

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

я удалил ссылки на «оболочки:» потому что это не рекомендуется, но по какой-то причине я не могу нажать кнопки в строке заголовка. Я загрузил образец решения с сайта, который я связал, и кнопки работали от меня.

Итак, я добавил ссылки на «shell», но я все еще не мог нажать кнопки.

Я не уверен, что я делаю неправильно здесь. Я в значительной степени полностью скопировал образец решения в свой проект, и он еще не работал. У меня есть IsHitTestVisibleInChrome, установленный на «true» для каждой кнопки, но это не имеет значения.

Я пробовал несколько других, гораздо более простых подходов, с основными кнопками и без стилей, все безрезультатно. Я чувствую, что мне не хватает чего-то очевидного здесь.

ответ

1

Это проблема с вашими командами. Не связывайте свойства Command. Просто установите их:

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

Вам также потребуется команда привязки для каждой из команд и выполнять их программно, как предложено @Louis Kottmann здесь:

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

+0

Спасибо за ответ. Я попробую это, когда я вернусь домой сегодня вечером –

+0

Это исправлено. Кроме того, я не добавлял привязки команд codebehind, как я должен был. Я привык делать это в ViewModel. Благодаря! –