Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.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
wpf中的可拖动弹出控件_Wpf_Wpf Controls - Fatal编程技术网

wpf中的可拖动弹出控件

wpf中的可拖动弹出控件,wpf,wpf-controls,Wpf,Wpf Controls,我需要一个wpf中的可拖动弹出控件,我想知道你们中是否有人可以帮助我。我确实看到了以下帖子: 但这不是它应该如何工作。。。?当我点击并拖动它时,它总是重置到一个特定的点,而且评论说这不是一个有效的方法。。。? 有人有别的选择吗 谢谢 我们可以编写一个行为,使任何弹出窗口都可以拖动。下面是与文本框关联的弹出窗口的一些示例XAML,该文本框在聚焦时打开并保持打开状态: <Grid> <StackPanel> <TextBox x:Name="t

我需要一个wpf中的可拖动弹出控件,我想知道你们中是否有人可以帮助我。我确实看到了以下帖子:

但这不是它应该如何工作。。。?当我点击并拖动它时,它总是重置到一个特定的点,而且评论说这不是一个有效的方法。。。? 有人有别的选择吗


谢谢

我们可以编写一个行为,使任何
弹出窗口都可以拖动。下面是与文本框关联的弹出窗口的一些示例XAML,该文本框在聚焦时打开并保持打开状态:

<Grid>
    <StackPanel>
        <TextBox x:Name="textBox1" Width="200" Height="20"/>
    </StackPanel>
    <Popup PlacementTarget="{Binding ElementName=textBox1}" IsOpen="{Binding IsKeyboardFocused, ElementName=textBox1, Mode=OneWay}">
        <i:Interaction.Behaviors>
            <local:MouseDragPopupBehavior/>
        </i:Interaction.Behaviors>
        <TextBlock Background="White">
            <TextBlock.Text>Sample Popup content.</TextBlock.Text>
        </TextBlock>
    </Popup>
</Grid>
如果您不熟悉行为,请安装Expression Blend 4 SDK并添加以下名称空间:

xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"

并将
System.Windows.Interactivity
添加到项目中。

您可以使用自定义边框布局打开子窗口。然后添加一个MouseDown处理程序以启用拖动:

<Window 
        WindowStyle="None"
        ShowInTaskbar="False"
        ResizeMode="NoResize"
        SizeToContent="Height"
        MouseDown="Window_MouseDown">
...
</Window>

就像链接的问题所说的,你可能应该使用拇指而不是popupCan。当鼠标移动时,用拇指移动弹出窗口。。。?我不这么认为就我所知。。。?你有没有一个我们可以用拇指拖动的例子?谢谢对不起,我是wpf的初学者…所以如果我的问题看起来很傻…我很抱歉…)这是一个直接的练习,让功能使用代码隐藏。只需添加处理程序并将AssociatedObject更改为popup1.oh ok cool…所以我只需要在代码隐藏中用关联的mouseup mousedown事件替换该行为,是吗?(将AssociatedObject替换为popup1)谢谢!谢谢matthias…很好的建议…如果我不能拖动弹出窗口,那么我想我会使用你的解决方案。我如何设置相对于特定控件的窗口位置,并使其只能在另一个窗口边界内拖动?在确定位置后,应可通过设置window.Left和window.Top来定位窗口使用指针屏幕(…)。我不知道如何把它夹在另一个窗户上。
<Window 
        WindowStyle="None"
        ShowInTaskbar="False"
        ResizeMode="NoResize"
        SizeToContent="Height"
        MouseDown="Window_MouseDown">
...
</Window>
    private void Window_MouseDown(Object sender, MouseButtonEventArgs e)
    {
        this.DragMove();
    }