Как сделать всплывающее окно WPF перетаскиваемым с помощью большого пальца? - PullRequest
4 голосов
/ 03 апреля 2011

Я долго и тяжело искал пример этого в сети. Я видел альтернативные методы для этого, но я хочу специально использовать большой палец. Пытаясь найти решение, я не смог правильно / функционально функционировать, так как я довольно новичок в WPF. Я был бы признателен, если бы кто-нибудь мог привести пример того, как вы можете реализовать вышеизложенное.

Приветствия

1 Ответ

4 голосов
/ 04 апреля 2011

A Popup не дает очевидного способа его перемещения;Вы можете разместить его только относительно цели размещения.Однако это дает вам дополнительное смещение относительно цели размещения, и этого достаточно, чтобы переместить его куда угодно.

Вот работающее решение только для разметки, которое демонстрирует перетаскиваемый Popup с использованием Thumb с использованием Программирование разметки .Существует текстовое поле с всплывающим окном, которое появляется, когда текстовое поле получает фокус клавиатуры.Во всплывающем окне есть текст и большой палец.

<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>
...