2012-11-08 9 views
2

이것은 첫 번째 질문이므로 명확히하기 위해 최선을 다할 것입니다.양식 단추가 작동하지 않습니다.

WinForms에서 몇 년 만에 WPF로 시작했고, 내 인생에서 내 버튼 이벤트를 트리거 할 수 없습니다. 현재 프로젝트에있는 것은 제목 표시 줄에 대한 사용자 정의 사각형이있는 테두리가없는 창입니다.

<Window 
x:Class="MainWindow" 
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
xmlns:M="clr-namespace:Metro_Test" 
Title="MainWindow" 
Height="720" 
Width="1280" 
IsTabStop="False" 
AllowsTransparency="True" 
Background="Transparent" 
BorderBrush="#FF3F3F3F" 
SnapsToDevicePixels="True" 
TextOptions.TextFormattingMode="Display" 
TextOptions.TextRenderingMode="ClearType" 
WindowStyle="None" 
WindowStartupLocation="CenterScreen" AllowDrop="True" ResizeMode="CanResizeWithGrip" PreviewMouseLeftButtonDown="HandleHeaderPreviewMouseDown"> 

<Window.Resources> 
    <Style x:Key="NoChromeButton" TargetType="{x:Type Button}"> 
     <Setter Property="Background" Value="Transparent"/> 
     <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}"> 
        <Grid x:Name="Chrome" Background="{TemplateBinding Background}" SnapsToDevicePixels="true"> 
         <ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" Margin="{TemplateBinding Padding}" RecognizesAccessKey="True" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/> 
        </Grid> 
        <ControlTemplate.Triggers> 
         <Trigger Property="IsEnabled" Value="false"> 
          <Setter Property="Foreground" Value="#ADADAD"/> 
          <Setter Property="Opacity" TargetName="Chrome" Value="0.5"/> 
         </Trigger> 
        </ControlTemplate.Triggers> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
    </Style> 
</Window.Resources> 

<Border 
    x:Name="m_edgeBorder" 
    Margin="14" 
    Background="White"> 

    <Border.Effect> 
     <DropShadowEffect 
     Opacity="0.999" 
     BlurRadius="14" 
     ShadowDepth="0"/> 
    </Border.Effect> 

    <Grid x:Name="MainGrid"> 

     <Rectangle 
      Height="28" 
      Fill="Blue" 
      VerticalAlignment="Top" 
      AllowDrop="False" 
      MouseLeftButtonDown="HandleHeaderPreviewMouseDown"/> 

     <Button x:Name="CloseButton" Style="{DynamicResource NoChromeButton}" Click="HandleCloseClick" MouseEnter="HandleMouseEnter" MouseLeave="HandleMouseLeave" ClickMode="Release" HorizontalAlignment="Right" Margin="500,2,2,0" VerticalAlignment="Top" Width="24" Height="24"> 
      <Image Source="Images\Gray\Close.png"></Image> 
     </Button> 

     <Button x:Name="MaximiseButton" Style="{DynamicResource NoChromeButton}" Click="HandleMaximiseClick" MouseEnter="HandleMouseEnter" MouseLeave="HandleMouseLeave" ClickMode="Release" HorizontalAlignment="Right" Margin="500,2,28,0" VerticalAlignment="Top" Width="24" Height="24"> 
      <Image Source="Images\Gray\Add.png"></Image> 
     </Button> 

     <Button x:Name="MinimiseButton" Style="{DynamicResource NoChromeButton}" Click="HandleMinimiseClick" MouseEnter="HandleMouseEnter" MouseLeave="HandleMouseLeave" ClickMode="Release" HorizontalAlignment="Right" Margin="500,2,54,0" VerticalAlignment="Top" Width="24" Height="24"> 
      <Image Source="Images\Gray\Minus.png"></Image> 
     </Button> 

     <Button x:Name="TestBtn" VerticalAlignment="Top" HorizontalAlignment="Right" Margin="500,2,80,0" Width="24" Height="24"> 
      <Image Source="Images\Gray\Close.png"></Image> 
     </Button> 
    </Grid> 
</Border> 
</Window> 

그리고 "코드 숨김"코드입니다 : :이 XAML 코드는 당신이 볼 수 있듯이

Class MainWindow 

Public Sub HandleHeaderPreviewMouseDown(sender As Object, e As MouseButtonEventArgs) 
    If e.LeftButton = MouseButtonState.Pressed Then 
     Me.DragMove() 
    End If 
End Sub 
Private Sub HandleCloseClick(sender As Object, e As MouseEventArgs) 
    Me.Close() 
End Sub 

Private Sub HandleMaximiseClick(sender As Object, e As MouseEventArgs) 
    If Me.WindowState = Windows.WindowState.Maximized Then 
     Me.WindowState = Windows.WindowState.Normal 
    ElseIf Me.WindowState = Windows.WindowState.Normal Then 
     Me.WindowState = Windows.WindowState.Maximized 
    End If 
End Sub 

Private Sub HandleMinimiseClick(sender As Object, e As MouseEventArgs) 
    Me.WindowState = Windows.WindowState.Minimized 
End Sub 

Private Sub HandleMouseLeave(sender As Button, e As MouseEventArgs) 

End Sub 

Private Sub HandleMouseEnter(sender As Button, e As MouseEventArgs) 

End Sub 
End Class 

, 난 여전히하는 MouseLeave 및 MouseEnter 이벤트의 모든 명령을 넣어하지 않은이 때문에 문제가 발생했습니다.

지금까지이 프로젝트에서 한 번도 내 버튼을 사용할 수 없었습니다. Window, Border 및 Grid 속성을 변경해 보았습니다. 또한 Rectangle 및 Window에서 PreviewMouseLeftButtonDown 이벤트를 제거하지 않으려 고 시도했습니다.

이 문제에 대한 도움을 주시면 대단히 감사하겠습니다.

답변

0

Steve가 게시 한 모든 내용을 고려해야하며 정확한 서명을 모르는 경우 수동으로 이벤트 핸들러를 만들지 않도록하십시오. 그러나 여기서 더 큰 문제는 전체 윈도우에 대해 마우스 미리보기 이벤트 (PreviewMouseLeftButtonDown="HandleHeaderPreviewMouseDown")를 처리하고 이벤트 핸들러에서 Me.DragMove() - 이벤트를 처리 된 것으로 표시하므로 하위 이벤트 컨트롤을 위해 더 이상 마우스 이벤트 핸들러가 호출되지 않는다는 것입니다. 먼저 라우트 된 이벤트 here에 대해 읽습니다. Me.DragMove()으로 전화해야합니다. 마우스를 누르고 이동 한 경우에만 온라인에서 많은 예제를 찾을 수 있습니다.

+0

감사합니다. Novithchi S, 나는 그 기사를 읽고 당신이 제안한대로 빠른 검색을 수행했습니다. StackOverflow에 대한이 기사를 생각해 냈습니다. - http://stackoverflow.com/questions/3592488/dragging-a-window-in-wpf-using-dragmove-method-and-click-handler-on-the-same- but 다른 누구에게나 동일한 문제가 발생하는 경우 위의 게시물의 코드를 가장 큰 컨트롤과 함께 사용하십시오. 예를 들어 "MainGrid"입니다. – JosephGarrone

관련 문제