gpt4 book ai didi

c# - 如何始终将 PopUp 放在 WPF 中的 ToggleButton 下

转载 作者:行者123 更新时间:2023-11-30 20:40:44 26 4
gpt4 key购买 nike

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

我的 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>

点击切换按钮的 C# 代码:

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

最佳答案

使用 PopupPlacementPlacementTarget 属性 :)

<Popup Placement="Bottom" PlacementTarget="{Binding ElementName=myToggleButton}" IsOpen="{Binding IsChecked, ElementName=Userbtn}" StaysOpen="False" />

这里要注意的是,如果在 Popup 打开时移动窗口,它不会随之移动。您可以做的是绑定(bind) IsOpen 属性到 ToggleButtonIsChecked 并设置 StaysOpen=False。这样做,弹出窗口将自动关闭,将按钮切换回来:),如果你要这样做,你也不需要 C# 代码:)

或者这里是另一个 SO 帖子的链接,如果它在任何情况下都应该保持打开状态: Move a WPF Popup

希望对您有所帮助:)

关于c# - 如何始终将 PopUp 放在 WPF 中的 ToggleButton 下,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32992577/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com