WPF Popup Button Вопрос - PullRequest
       5

WPF Popup Button Вопрос

1 голос
/ 30 июля 2009

В WPF мне нужна кнопка, которая при нажатии открывает или закрывает всплывающее окно в зависимости от того, открыто ли оно или нет (закройте его, если оно открыто, откройте его, если оно закрыто), и я хочу сделать это чисто в XAML. Возможно ли это?

Спасибо,
Рой

Ответы [ 3 ]

6 голосов
/ 30 июля 2009

Да, вам нужно будет использовать ToggleButton вместо стандартной кнопки. Тогда вы сможете связать свойство Popup.IsOpen со свойством ToggleButton.IsChecked.

Если вам нужен фрагмент XAML, демонстрирующий это, я могу сделать его за пару минут. Но это должно быть достаточно просто.

1 голос
/ 14 апреля 2011

Вот хорошее решение вопроса, реализованного в виде поведения и, следовательно, независимого от кода, стоящего за / ViewModel.

0 голосов
/ 14 апреля 2016

Я просто решил эту проблему, как сказал @Charlie. Вот мой код в page.xaml файле.

<ToggleButton Name="MenuButton" Width="120" Height="40"/>
            <Popup Width="130" Height="150" PlacementTarget="{Binding ElementName=MenuButton}" Placement="Bottom" AllowsTransparency="True" PopupAnimation="Fade" IsOpen="{Binding ElementName=MenuButton,Path=IsChecked}" StaysOpen="False">
                <Border Background="Black" CornerRadius="10">
                    <Grid >
                        <Grid.RowDefinitions>
                            <RowDefinition />
                            <RowDefinition />
                            <RowDefinition />
                        </Grid.RowDefinitions>
                        <Grid Grid.Row="0">
                            <Button Content="Log" Width="120" Height="40"/>
                        </Grid>
                        <Grid Grid.Row="1">
                            <Button Content="Shut Down" Width="120" Height="40"/>
                        </Grid>
                       <Grid Grid.Row="2">
                            <Button Content="About..." Width="120" Height="40"/>
                        </Grid>
                    </Grid>
                </Border>
            </Popup>
...