【问题标题】:What kind of panel should I use to create a custom dropdown?我应该使用哪种面板来创建自定义下拉菜单?
【发布时间】:2012-04-30 04:20:26
【问题描述】:

我需要创建一个自定义下拉菜单,该下拉菜单有一个打开它的按钮和一个显示某些内容的面板,我想让它在单击外部时关闭,我应该使用哪种面板? 我尝试了 popupmenu 但在失去焦点后无法关闭它,并尝试了 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>

【问题讨论】:

    标签: wpf mvvm wpf-controls wpftoolkit


    【解决方案1】:

    您应该使用Popup 控件。 here 是 MSDN 文档,这里有一个 article 来帮助指明方向

    【讨论】:

    【解决方案2】:

    我终于在 2 天后创建了我需要的东西!!,我真的找不到更好的解决方案,我不得不放两个按钮,一个用于显示弹出窗口,另一个用于关闭弹出窗口!

    在xml中

        <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);
        }
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-05-21
    • 2012-12-15
    • 1970-01-01
    • 1970-01-01
    • 2016-04-11
    • 2014-07-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多