2014-09-30 2 views
0

Всплывающее окно WPF не работает должным образом для меня. Таким образом, поведение отображается всплывающее окно, когда мышь вводит кнопку «Test:», и после этого нажатие кнопки «Закрыть», которая находится во всплывающем меню, скроет всплывающее окно. Все работает нормально, пока я не нажму кнопку «Test». После этого событие Mouse событие увольняют на кнопку «Test», но всплывающее окно не отображается.Всплывающее окно WPF исчезает магически

было бы здорово, если бы кто-то сможет помочь мне здесь.

Спасибо, Код

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

    <Grid Margin="10"> 
     <Button x:Name="btnTest" Width="100" Height="25" 
       MouseEnter="btnTest_MouseEnter">Test Button</Button> 
     <Popup Name="MyPopup" 
       PlacementTarget="{Binding ElementName=btnTest}" 
       Placement="Mouse" 
       StaysOpen="False"> 
      <StackPanel Background="PaleGreen"> 
       <Label HorizontalAlignment="Center">I am a popup</Label> 
       <Button Click="Hide_Click" Content="Close"/> 
      </StackPanel> 
     </Popup> 
    </Grid> 
</Grid> 

Код за

using System; 
using System.Collections.Generic; 
using System.Windows; 
using System.Windows.Input; 
namespace WpfApplication1 
{ 
/// <summary> 
/// Interaction logic for MainWindow.xaml 
/// </summary> 
public partial class MainWindow : Window 
{ 
    public MainWindow() 
    { 
     InitializeComponent(); 
    } 
    private void Show_Click(object sender, RoutedEventArgs e) 
    { 
     MyPopup.IsOpen = true; 
    } 
    private void Hide_Click(object sender, RoutedEventArgs e) 
    { 
     MyPopup.IsOpen = false; 
    } 
    private void btnTest_MouseEnter(object sender, MouseEventArgs e) 
    { 
     MyPopup.IsOpen = true; 
    } 
} 
} 
+0

Ваша тестовая кнопка не имеет события щелчка ... или я что-то пропустил? – Steve

+0

@steve, хотя у него нет обратного вызова клика, вы должны уметь видеть объясненное поведение. – MChicago

+0

Вы сказали, что все работает нормально, пока вы не нажмете на кнопку. Но кнопка не запускает событие, чтобы открыть всплывающее окно, а StaysOpen = «False». Итак, что именно вы ожидаете ... – Steve

ответ

1

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

<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> 
    <Grid Margin="10"> 
     <Button x:Name="btnTest" Width="100" Height="25" Content="Test Button"> 
      <Button.Triggers> 
       <EventTrigger RoutedEvent="Button.MouseEnter"> 
        <BeginStoryboard> 
         <Storyboard> 
          <BooleanAnimationUsingKeyFrames 

      Storyboard.TargetName="MyPopup" 
      Storyboard.TargetProperty="IsOpen" 
      Duration="0:0:1" FillBehavior="HoldEnd"> 
           <DiscreteBooleanKeyFrame Value="True" KeyTime="0:0:0" /> 
          </BooleanAnimationUsingKeyFrames> 
         </Storyboard> 
        </BeginStoryboard> 
       </EventTrigger> 
      </Button.Triggers> 
     </Button> 
     <Popup Name="MyPopup" 
      PlacementTarget="{Binding ElementName=btnTest}" 
      Placement="Mouse" 
      StaysOpen="False"> 
      <StackPanel Background="PaleGreen"> 
       <Label HorizontalAlignment="Center">I am a popup</Label> 
       <Button Content="Close"> 
        <Button.Triggers> 
         <EventTrigger RoutedEvent="Button.Click"> 
          <BeginStoryboard> 
           <Storyboard> 
            <BooleanAnimationUsingKeyFrames     
      Storyboard.TargetName="MyPopup" 
      Storyboard.TargetProperty="IsOpen" 
      Duration="0:0:1" FillBehavior="HoldEnd"> 
             <DiscreteBooleanKeyFrame Value="False" KeyTime="0:0:0" /> 
            </BooleanAnimationUsingKeyFrames> 
           </Storyboard> 
          </BeginStoryboard> 
         </EventTrigger> 
        </Button.Triggers> 
       </Button> 
      </StackPanel> 
     </Popup> 
    </Grid> 
</Grid> 
</Window> 

Я не уверен, если есть более короткий путь; вероятно, есть.

+1

спасибо. он отлично работает. Кстати, такие вещи должны работать из коробки. Извините, что отсутствие достаточной репутации не позволяет мне дать вам кредит на это. – MChicago

Смежные вопросы