0

ホバー ポップアップがある WPF アプリケーションを取得しました。ポップアップには、開くことができるさまざまなファイルのリストが含まれています (例: pdf、Excel など)。

ダブルクリックしてファイルをナビゲートして選択すると、期待どおりにファイルが開きます。

しかし、別のファイルに移動すると、ホバー選択が機能していないことがわかります。

ここで別のファイルを選択すると、元のファイルが再び開かれます。

私は Process.Start を使用しており、ファイルへのフルパスをメソッドに渡しています。

アプリケーションはかなりのサイズなので、これをさらに調べるために私が書いたテストアプリケーションの抜粋を次に示します

メイン ウィンドウの XAML

<Window x:Class="TestPopupIssue.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">

    <Canvas Margin="5" Background="Red" Width="200" Height="150" >

        <Rectangle Name="rectangle1"
           Canvas.Top="60" Canvas.Left="50"
           Height="85" Width="60" 
           Fill="Black" MouseEnter="rectangle1_MouseEnter"   MouseLeave="rectangle1_MouseLeave"  />

        <Popup x:Name="PopupWindow" PlacementTarget="{Binding ElementName=rectangle1}" Placement="Top"  MouseEnter="rectangle1_MouseEnter"  MouseLeave="rectangle1_MouseLeave">
            <ListBox MinHeight="50" ItemsSource="{Binding Files}" MouseDoubleClick="FileList_MouseDoubleClick"`enter code here` x:Name="FileList" />
        </Popup>
    </Canvas>


</Window>

MainWindow.xaml.cs

public partial class MainWindow : Window
    {
        FileList f;

        public MainWindow()
        {
            InitializeComponent();

            f = new FileList();
            f.PopulateFiles();

            this.DataContext = f;
        }

        private void FileList_MouseDoubleClick(object sender, MouseButtonEventArgs e)
        {
            if (FileList.SelectedItem != null)
            {
                string item = FileList.SelectedItem as string;

                if (item != null)
                {
                   System.Diagnostics.Process.Start(item);               
                }

            }
        }

        private void rectangle1_MouseEnter(object sender, MouseEventArgs e)
        {
            PopupWindow.IsOpen = true;
        }

        private void rectangle1_MouseLeave(object sender, MouseEventArgs e)
        {
            PopupWindow.IsOpen = false;
        }
    }

そして、FileList という名前のファイル パスの一般的な文字列リストを持つ FileList クラスがあります。

ありがとう

4

1 に答える 1

1

プロセスでファイルを開くときに、サンプルアプリケーションをテストしました。開始すると、ファイルを開くアプリケーションによってフォーカスが盗まれます。どういうわけか、ウィンドウがフォーカスを失ったときに、ポップアップのリストボックスはSelectedItemを変更できません。

残念ながら、ウィンドウにフォーカスを戻すことができませんでした。this.SetFocus()は機能しませんでした。

とにかく別の可能な解決策は、ファイルを開くときにポップアップを閉じることです。

private void FileList_MouseDoubleClick(object sender, MouseButtonEventArgs e)
{
    if (FileList.SelectedItem != null)
    {
        string item = FileList.SelectedItem as string;

        if (item != null)
        {
            System.Diagnostics.Process.Start(item);
            PopupWindow.IsOpen = false;
        }
    }       
}

このようにして、ListBoxはselectedItemを再度更新できます。

お役に立てれば!

于 2013-02-25T16:03:07.317 に答える