Место запуска окна при наведении курсора мыши - PullRequest
0 голосов
/ 12 февраля 2020

Я работаю над проектом WPF с Caliburn Micro. Обратите внимание на следующие фрагменты кода:

PopupWindowView.xaml

<Window x:Class="PTSRDesktopUI.Views.PopupWindowView"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:PTSRDesktopUI.Views"
        mc:Ignorable="d" ShowInTaskbar="True"
        ResizeMode="NoResize" SizeToContent="Height" FontSize="24"
        MouseDown="Window_MouseDown" Background="#FFF7F7F7" Icon="/Images/infoicon_8Ve_icon.ico"
        Title="Pfad Info" Height="300" Width="500">

    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="*"/>
            <ColumnDefinition Width="Auto"/>
            <ColumnDefinition Width="*"/>
        </Grid.ColumnDefinitions>
        <TextBlock FontSize="20" Grid.Column="1" Text="{Binding Path=Path}" Margin="10 10 10 10"
                 HorizontalAlignment="Center" VerticalAlignment="Center" IsEnabled="False" 
                    FontFamily="Segoe UI Light"/>
    </Grid>
</Window>

PopupWindowViewModel.cs

using Caliburn.Micro;
using PTSRDesktopUI.Models;

namespace PTSRDesktopUI.ViewModels
{
    public class PopupWindowViewModel : Screen
    {
        private string _path;

        public PopupWindowViewModel(ChangesModel model)
        {
            _path = model.ParameterPfad;
        }

        public string Path
        {
            get { return _path; }
            set
            {
                _path = value;
                NotifyOfPropertyChange(() => Path);
            }
        }
    }
}

OverviewView.xaml

    <DataGridTemplateColumn CellStyle="{StaticResource DataGridCellCentered}" Header="Info">
        <DataGridTemplateColumn.CellTemplate>
            <DataTemplate>
                <Button BorderThickness="0" Height="30" Width="30" 
                        Style="{StaticResource {x:Static ToolBar.ButtonStyleKey}}"
                        cal:Message.Attach="ShowPath($this)">
                    <Image Source="/Images/infoicon.png"/>
                </Button>
            </DataTemplate>
        </DataGridTemplateColumn.CellTemplate>
    </DataGridTemplateColumn>

OverviewViewModel.cs

private readonly IWindowManager manager = new WindowManager();

public void ShowPath(ChangesModel model)
{
    manager.ShowWindow(new PopupWindowViewModel(model), null, null);           
}

Все это происходит, когда Button в DataGrid нажата, PopupWindow выскакивает и отображает некоторые данные. Все отлично работает. Единственное, чего я не могу понять, это как отобразить новый PopupWindow в том же месте, где находится нажатый Button, или, точнее, там, где находится мой указатель мыши. Я прочитал все остальные вопросы StackOverflow относительно этой проблемы, но ни один из них не помог мне. Я либо получаю ошибку, либо она просто не работает. У кого-нибудь есть идеи как это решить?

...