如何使用拇指使 WPF 弹出窗口可拖动?

Posted

技术标签:

【中文标题】如何使用拇指使 WPF 弹出窗口可拖动?【英文标题】:How do I make a WPF popup draggable using a thumb? 【发布时间】:2011-07-28 15:11:54 【问题描述】:

我在网上搜索了很长时间并且很难找到这样的例子。我已经看到了替代方法,但我想专门使用拇指。在试图找出一个解决方案时,我一直无法正确/工作,因为我对 WPF 还很陌生。如果有人能举例说明您如何实施上述方法,我将不胜感激。

干杯

【问题讨论】:

【参考方案1】:

Popup 并没有给你一个明显的移动它的方法;您只能相对于其放置目标放置它。但是,它确实为您提供了相对于放置目标的额外偏移量,这足以将其移动到任何地方。

这是一个有效的纯标记解决方案,演示了可拖动的 Popup 使用 Thumb 和 Markup Programming。有一个文本框,当文本框接收到键盘焦点时会弹出一个弹出窗口。弹出窗口有一些文本和一个拇指。

<Window
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:p="http://markupprogramming.codeplex.com/markup/programming"
    Height="300" Width="300">
    <Grid>
        <StackPanel>
            <TextBox x:Name="textBox1" Width="200" Height="20"/>
        </StackPanel>
        <Popup Name="popup" PlacementTarget="Binding ElementName=textBox1"
               IsOpen="Binding IsKeyboardFocused, ElementName=textBox1, Mode=OneWay">
            <StackPanel Orientation="Horizontal">
                <TextBlock Background="White" Text="Sample Popup content."/>
                <Thumb Name="thumb" Width="20" Height="20"/>
            </StackPanel>
            <p:Attached.Operations>
                <p:ScriptHandler Path="@FindElement('thumb').DragDelta">
                    @AssociatedObject.HorizontalOffset += @EventArgs.HorizontalChange;
                    @AssociatedObject.VerticalOffset += @EventArgs.VerticalChange;
                </p:ScriptHandler>
            </p:Attached.Operations>
        </Popup>
    </Grid>
</Window>

【讨论】:

在 .NET 3.5 中可以使用标记编程吗?

以上是关于如何使用拇指使 WPF 弹出窗口可拖动?的主要内容,如果未能解决你的问题,请参考以下文章

使 javascript 弹出窗口可拖动

WPF 弹出窗口:如何为弹出窗口制作可重复使用的模板?

如何使 WPF 弹出窗口出现在应用程序的右下角?

如何通过拖动扩展的窗口框架使 WPF 窗口可移动?

如何使WPF弹出式窗口不被隐藏在主应用程序

可拖动的非模态弹出窗口 Jquery Mobile