1

開くためのボタンと何かを表示するためのパネルを持つカスタム ドロップダウンを作成する必要があり、その外側をクリックすると閉じるようにしたいのですが、どのようなパネルを使用すればよいですか? popupmenu を試してみましたが、lostfocus 後に閉じることができず、contextmenu を試しましたが、その内部アイテムをクリックすると閉じます。

任意の提案をいただければ幸いです。

私はこのようなことを試しました:

    <Button x:Name="toggleButton"  
            ContextMenuService.Placement="Top"  Click="ToggleButton_Click"
            Margin="0" Content="+">
        <Button.ContextMenu>
            <ContextMenu Width="200" 
                         HorizontalContentAlignment="Stretch"
                         VerticalContentAlignment="Stretch" >
                <StackPanel>
                    <DataGrid >
                        <DataGrid.Columns>
                            <DataGridTextColumn/>
                            <DataGridTextColumn/>
                        </DataGrid.Columns>
                    </DataGrid>
                    <TextBlock Text="sadfasdfas" />
                    <TextBox Text="" Width="100"/>
                </StackPanel>
            </ContextMenu>
        </Button.ContextMenu>
    </Button>
4

2 に答える 2

2

Popupコントロール を使用する必要があります。ここにMSDNのドキュメントがあり、ここに道を示すのに役立つ記事があります

于 2012-04-30T04:23:51.633 に答える
1

ついに私は2日後に必要なものを作成しました!!そして私は本当により良い解決策を見つけることができませんでした、私はポップアップを表示するための2つのボタンとポップアップを閉じるためのもう1つのボタンを置く必要がありました!

xamlで

    <ToggleButton x:Name="ShowPopup" Width="20" Height="20" Click="buttonShowPopup_Click"  Panel.ZIndex="1" />
    <ToggleButton x:Name="ClosePopup" Width="20" Height="20" Click="ClosePopupPopup_Click"  />
    <Popup x:Name="popup" 
        HorizontalOffset="0"
        VerticalOffset="0"
        PlacementTarget="{Binding ElementName=buttonShowPopup}"
        Placement="Top"
        PopupAnimation="Slide"
        AllowsTransparency="True"
        Focusable="True"

        StaysOpen="False" Margin="36,0,-36,0">
        <Grid LostFocus="Grid_LostFocus" >
            <TextBox Text="asdasd"/>
        </Grid>
    </Popup>

コードビハインドで

 public DropDown()
    {
        InitializeComponent();
        popup.Closed += popup_Closed;
    }

    private void ClosePopupPopup_Click(object sender, RoutedEventArgs e)
    {
        popup.IsOpen = false;
    }
    private void buttonShowPopup_Click(object sender, RoutedEventArgs e)
    {
        popup.IsOpen = true;
        ClosePopup.SetValue(Canvas.ZIndexProperty, 1);
        ShowPopup.SetValue(Canvas.ZIndexProperty, 0);
    }

    void popup_Closed(object sender, EventArgs e)
    {
        ShowPopup.SetValue(Canvas.ZIndexProperty, 1);
        ClosePopup.SetValue(Canvas.ZIndexProperty, 0);
    }
于 2012-04-30T07:39:37.417 に答える