всплывающее окно wpf не закрывается, когда фокус потерян в xaml - PullRequest
0 голосов
/ 25 июля 2010

Я написал следующий код xaml, чтобы показать всплывающее окно с содержимым в элементе управления Expander. все работает нормально до позиции, где открывается всплывающее окно при нажатии кнопки. но всплывающее окно не закрывается, когда я щелкаю от него. плюс, как только я щелкаю, чтобы закрыть всплывающее окно, все мое приложение, кажется, зависло на некоторое время. Я пытаюсь выяснить, в чем может быть проблема. Может ли кто-нибудь помочь мне найти это, пожалуйста? Спасибо тебе.

<Style TargetType="{x:Type Expander}">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type Expander}">
                    <StackPanel>
                        <Button x:Name="btnTask" Content="{TemplateBinding Header}" >
                            <Button.Template>
                                <ControlTemplate TargetType="{x:Type Button}">
                                    <Label Content="{TemplateBinding Content}" Margin="2,0,2,0" />
                                </ControlTemplate>
                            </Button.Template>
                            <Button.ToolTip>
                                <Border CornerRadius="0,2,0,2" BorderBrush="White" BorderThickness="1" Background="SeaShell">
                                    <StackPanel Width="150" Height="Auto">
                                        <TextBlock TextWrapping="Wrap" Text="{TemplateBinding Tag}" Padding="2"/>
                                    </StackPanel>
                                </Border>
                            </Button.ToolTip>
                        </Button>
                        <Popup x:Name="popupTask" Height="200" Width="200" StaysOpen="False">
                            <ContentControl Content="{TemplateBinding Content}" />
                        </Popup>
                    </StackPanel>
                    <ControlTemplate.Triggers>
                        <EventTrigger SourceName="btnTask" RoutedEvent="ButtonBase.Click">
                            <BeginStoryboard>
                                <Storyboard TargetName="popupTask">
                                    <BooleanAnimationUsingKeyFrames Storyboard.TargetProperty="IsOpen" BeginTime="0:0:0" Duration="0:0:3">
                                        <DiscreteBooleanKeyFrame KeyTime="0:0:0.2" Value="True" />
                                    </BooleanAnimationUsingKeyFrames> 
                                </Storyboard> 
                            </BeginStoryboard>
                        </EventTrigger>
                    </ControlTemplate.Triggers>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>

1 Ответ

0 голосов
/ 25 июля 2010

Вы можете использовать ToggleButton вместо Button и использовать другой триггер, основанный на свойстве ToggleButton IsChecked.Вот как вы можете изменить свой стиль:

        <Style TargetType="{x:Type Expander}">
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="{x:Type Expander}">
                        <StackPanel>
                            <ToggleButton x:Name="btnTask" Content="{TemplateBinding Header}">
                                <ToggleButton.Template>
                                    <ControlTemplate TargetType="{x:Type ToggleButton}">
                                        <Label Content="{TemplateBinding Content}" Margin="2,0,2,0" />
                                    </ControlTemplate>
                                </ToggleButton.Template>
                                <ToggleButton.ToolTip>
                                    <Border CornerRadius="0,2,0,2" BorderBrush="White" BorderThickness="1" Background="SeaShell">
                                        <StackPanel Width="150" Height="Auto">
                                            <TextBlock TextWrapping="Wrap" Text="{TemplateBinding Tag}" Padding="2"/>
                                        </StackPanel>
                                    </Border>
                                </ToggleButton.ToolTip>
                            </ToggleButton>
                            <Popup x:Name="popupTask" Height="200" Width="200" StaysOpen="False">
                                <ContentControl Content="{TemplateBinding Content}" />
                            </Popup>
                        </StackPanel>
                        <ControlTemplate.Triggers>
                            <Trigger SourceName="btnTask" Property="IsChecked" Value="True">
                                <Setter TargetName="popupTask" Property="IsOpen" Value="True" />
                            </Trigger>
                        </ControlTemplate.Triggers>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>
...