Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何始终在WPF中的切换按钮下放置弹出窗口_C#_Wpf_Popup_Togglebutton - Fatal编程技术网

C# 如何始终在WPF中的切换按钮下放置弹出窗口

C# 如何始终在WPF中的切换按钮下放置弹出窗口,c#,wpf,popup,togglebutton,C#,Wpf,Popup,Togglebutton,当我点击按钮时,我想在切换按钮下放置一个弹出窗口。在这个弹出窗口中,我想添加按钮和其他控件。但是,当我调整主窗口的大小时,如何确保弹出窗口始终位于我的切换按钮下呢 我的XAML代码: <ToggleButton x:Name="userBtn" Margin="610,25,378,0" VerticalAlignment="Top" Height="29" Grid.Column="2" >

当我点击按钮时,我想在切换按钮下放置一个弹出窗口。在这个弹出窗口中,我想添加按钮和其他控件。但是,当我调整主窗口的大小时,如何确保弹出窗口始终位于我的切换按钮下呢

我的XAML代码:

     <ToggleButton
    x:Name="userBtn"
    Margin="610,25,378,0"
    VerticalAlignment="Top"            
    Height="29"
    Grid.Column="2" 
    >
        <ToggleButton.Resources>
            <BitmapImage x:Key="imgNormal" UriSource="/Resources/home.jpg"/>
            <BitmapImage x:Key="imgHover" UriSource="/Resources/home_checked.jpg"/>
            <BitmapImage x:Key="imgChecked" UriSource="/Resources/home_checked.jpg"/>
        </ToggleButton.Resources>
        <ToggleButton.Style>
            <Style TargetType="ToggleButton">
                <Setter Property="Template">
                    <Setter.Value>
                        <ControlTemplate TargetType="ToggleButton" >
                            <StackPanel Orientation="Horizontal" VerticalAlignment="Top" Width="150" Height="32">
                                <Image x:Name="PART_Image" Height="22" Width="22" RenderOptions.BitmapScalingMode="HighQuality" HorizontalAlignment="Center" Margin="0,0,0,0" Source="{StaticResource imgNormal}"/>
                                <TextBlock x:Name="PART_TEXT" FontFamily="Arial" Foreground="#FFAFADAD" FontSize="13" HorizontalAlignment="Center" Text="{x:Static properties:Resources.BtnDashboard}"  Margin="10,9,0,0"></TextBlock>
                            </StackPanel>
                            <ControlTemplate.Triggers>
                                <Trigger Property="IsChecked" Value="true">
                                    <Setter TargetName="PART_Image" Property="Source" Value="{StaticResource imgChecked}"/>
                                    <Setter TargetName="PART_TEXT" Property="Foreground" Value="#79B539" />
                                </Trigger>
                                <Trigger Property="IsMouseOver" Value="true">
                                    <Setter TargetName="PART_Image" Property="Source" Value="{StaticResource imgHover}"/>
                                    <Setter TargetName="PART_TEXT" Property="Foreground" Value="#79B539" />
                                </Trigger>
                                <Trigger Property="IsEnabled" Value="false">
                                    <Setter TargetName="PART_Image" Property="Opacity" Value="0.6"/>
                                </Trigger>
                            </ControlTemplate.Triggers>
                        </ControlTemplate>
                    </Setter.Value>
                </Setter>
            </Style>
        </ToggleButton.Style>
    </ToggleButton>

    <Popup Name="UserMenuPopUp" PopupAnimation="Fade" Width="280" Height="auto" Margin="20" AllowsTransparency="True" HorizontalAlignment="Left" Placement="bottom" PlacementTarget="{Binding ElementName=userBtn}" IsOpen="{Binding IsChecked, ElementName=Userbtn}" StaysOpen="false" >
        <Border Margin="2,0,48,0" BorderThickness="1" Background="#EEEEEE" Height="105">
            <Grid>

            </Grid>
        </Border>
    </Popup>

使用
Placement
PlacementTarget
弹出窗口的属性


这里需要注意的是,如果在
弹出窗口
打开时移动窗口,它将不会移动。。您可以将
IsOpen
属性绑定到
ToggleButton
IsChecked
并将
StaysOpen
=False。这样,弹出窗口将自动关闭,将按钮向后切换:),如果要执行此操作,您也不需要C代码:)

或者这里是另一个SO帖子的链接,如果它应该保持开放,无论情况如何:


希望有帮助:)

谢谢您的回答@faztp12。弹出窗口在正确的位置,但当我移动主窗口时,它不会遵循:(完美解决方案:)非常感谢。但是如果没有C#code,它将无法工作?不再需要C#code,因为
弹出窗口
绑定到
切换按钮
s IsChecked属性:)删除UserBtn#u单击事件;)我删除了UserBtn_Click事件,但它不起作用?:(您是否在
弹出窗口中添加了'IsOpen=“{Binding IsChecked,ElementName=Userbtn}'”
?:)
    private void UserBtn_Click(object sender, RoutedEventArgs e)
    {
        // Get location, adn sender
        var element = (System.Windows.Controls.Primitives.ToggleButton)sender;
        var location = element.PointToScreen(new Point(0, 0));

        // Set popup location
        UserMenuPopUp.HorizontalOffset = (location.X);
        UserMenuPopUp.VerticalOffset = (location.Y);
        UserMenuPopUp.IsOpen = true;
    }
<Popup Placement="Bottom" PlacementTarget="{Binding ElementName=myToggleButton}" IsOpen="{Binding IsChecked, ElementName=Userbtn}" StaysOpen="False" />