繁体   English   中英

C#WPF Popup位置=中心并在元素顶部

[英]C# WPF Popup placement = center and on top of element

即时通讯使用的按钮包含一个弹出控件。 现在,我希望弹出控件在按钮顶部对齐,并且也应该居中。

<Style x:Key="ButtonStyle2" TargetType="{x:Type Button}">
            <Setter Property="Foreground" Value="White" />
            <Setter Property="Padding" Value="2" />
            <Setter Property="BorderThickness" Value="0" />
            <Setter Property="Background" Value="Transparent" />
            <Setter Property="BorderBrush" Value="Transparent" />
            <Setter Property="HorizontalAlignment" Value="Center" />
            <Setter Property="VerticalAlignment" Value="Center" />
            <Setter Property="HorizontalContentAlignment" Value="Center" />
            <Setter Property="VerticalContentAlignment" Value="Center" />
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="{x:Type Button}">
                        <Border x:Name="Bd" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="Transparent" Padding="{TemplateBinding Padding}" UseLayoutRounding="True">
                            <Grid>
                                <Popup x:Name="popup" Placement="Top" AllowsTransparency="True" PopupAnimation="Slide" HorizontalOffset="-7" IsOpen="False">
                                    <DockPanel Width="55" Background="#01FFFFFF">
                                        <Button x:Name="DeleteButton" DockPanel.Dock="Top" Margin="0,0,0,5" Style="{DynamicResource ButtonStyle3}" Background="Transparent" BorderThickness="0" Width="30" Height="30" Click="DeleteButton_Click" />
                                        <Button x:Name="EditButton" DockPanel.Dock="Top" Margin="0,0,0,5"  Style="{DynamicResource ButtonStyle4}" Background="Transparent" BorderThickness="0" Width="30" Height="30" Click="EditButton_Click" />
                                        <Button x:Name="AddButton" DockPanel.Dock="Bottom" Margin="0,0,0,5"  Style="{DynamicResource ButtonStyle5}" Background="Transparent" BorderThickness="0" Width="30" Height="30" Click="AddButton_Click" />
                                    </DockPanel>
                                </Popup>
                                <Image x:Name="add_img" Source="img\menu.png" RenderOptions.BitmapScalingMode="Fant" RenderTransformOrigin="0.5,0.5" UseLayoutRounding="True">
                                    <Image.RenderTransform>
                                        <RotateTransform Angle="0" />
                                    </Image.RenderTransform>
                                </Image>
                            </Grid>
                        </Border>
                        <ControlTemplate.Triggers>
                            <EventTrigger RoutedEvent="Button.Click">
                                <BeginStoryboard Storyboard="{StaticResource HidePopup}" />
                            </EventTrigger>
                            <EventTrigger RoutedEvent="Button.MouseEnter">
                                <BeginStoryboard Storyboard="{StaticResource ShowPopup}" />
                                <BeginStoryboard>
                                    <Storyboard BeginTime="00:00:00.000" Duration="00:00:00.300">
                                        <DoubleAnimation Storyboard.TargetName="add_img" Storyboard.TargetProperty="RenderTransform.Angle" From="0" To="180" BeginTime="00:00:00.000" Duration="00:00:00.200" AutoReverse="False" />
                                    </Storyboard>
                                </BeginStoryboard>
                            </EventTrigger>
                            <EventTrigger RoutedEvent="Button.MouseLeave">
                                <BeginStoryboard Storyboard="{StaticResource HidePopup}" />
                                <BeginStoryboard>
                                    <Storyboard BeginTime="00:00:00.000" Duration="00:00:00.300">
                                        <DoubleAnimation Storyboard.TargetName="add_img" Storyboard.TargetProperty="RenderTransform.Angle" From="180" To="0" BeginTime="00:00:00.000" Duration="00:00:00.200" AutoReverse="False" />
                                    </Storyboard>
                                </BeginStoryboard>
                            </EventTrigger>
                        </ControlTemplate.Triggers>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>

该代码段有效,但是如果我使用另一台计算机来编译我的代码,则该弹出窗口不再对齐。 有一个更好的方法吗?

您忘记设置弹出窗口的PlacementTarget属性了吗?

希望这会有所帮助:

<Popup ... PlacementTarget="{Binding RelativeSource={RelativeSource TemplatedParent}}"></Popup>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM