WPF: Как я устанавливаю владельца Window Диалогового окна, показанного UserControl?

Я понял это, ребята.

Таким образом, в ориентации 0 или 180 Shape.top и Shape.Left дают точные последовательные измерения.

В 90 или 270 верхний и левый должны быть скорректированы, чтобы дать точные последовательные измерения.

Код: Shape.Top - ((Shape.Width-Shape.Height) / 2) и Shape.Left + ((Shape.Width-Shape.Height) / 2)
(ПРИМЕЧАНИЕ. РЕГУЛИРОВКА ТОЛЬКО ПРИМЕНЯЕТСЯ, КОГДА ОБЪЕКТИРУЕТСЯ НА 90 или 270 // Shape.Rotation)

Кроме того, здесь используется форма с угловым соединителем

54
задан VansFannel 4 May 2016 в 21:21
поделиться

5 ответов

Попытайтесь использовать

.Owner = Window.GetWindow(this)
124
ответ дан slavoo 7 November 2019 в 07:37
поделиться

Для получения высокоуровневого окна управление находится в, предполагая, что существует тот:

(Window)PresentationSource.FromVisual(this).RootVisual

Для получения главного окна:

Application.Current.MainWindow
40
ответ дан Nir 7 November 2019 в 07:37
поделиться

Обновление, чтобы попытаться помочь Greg из комментариев. Команда работает в меню главных окон, кнопке в пользовательском элементе управления и контекстном меню в пользовательском элементе управления.

я сделал бы это с командами. Поэтому имейте класс Commands.cs что-то как:

public static class Commands
{
    public static RoutedUICommand TestShowDialogCommand = new RoutedUICommand("Test command", "TestShowDialog", typeof(Commands));
}

Регистр они в Вашем главном окне: (Вам не нужен canshow, он принимает значение по умолчанию к истинному)

    public Window1()
    {
        InitializeComponent();

        CommandManager.RegisterClassCommandBinding(typeof(System.Windows.Controls.Control),
            new CommandBinding(Commands.TestShowDialogCommand, ShowDialogCommand, CanShowDialogCommand));
    }

    private void ShowDialogCommand(object sender, ExecutedRoutedEventArgs e)
    {
        var box = new Window();
        box.Owner = this;
        box.ShowDialog();

    }

    private void CanShowDialogCommand(object sender, CanExecuteRoutedEventArgs e)
    {
        e.CanExecute = true;
    }

, Это - мой xaml для главного окна:

<Window x:Class="WpfApplication1.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:WpfApplication1="clr-namespace:WpfApplication1"
Title="Window1" Height="300" Width="322">
<Grid>
    <StackPanel>
        <Menu>
            <MenuItem Header="Test">
                <MenuItem Header="ShowDialog" Command="{x:Static WpfApplication1:Commands.TestShowDialogCommand}"/>
            </MenuItem>
        </Menu>
        <WpfApplication1:BazUserControl />
    </StackPanel>
</Grid>
</Window>

Это - xaml для моего пользовательского элемента управления (код по умолчанию позади только)

<UserControl x:Class="WpfApplication1.BazUserControl"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:WpfApplication1="clr-namespace:WpfApplication1"
Height="300" Width="300">
<Grid>
    <StackPanel>
        <Button Command="{x:Static WpfApplication1:Commands.TestShowDialogCommand}" Content="ClickMe" ></Button>
        <TextBox>
            <TextBox.ContextMenu>
                <ContextMenu>
                    <MenuItem Header="ShowDialog" Command="{x:Static WpfApplication1:Commands.TestShowDialogCommand}" />
                </ContextMenu>
            </TextBox.ContextMenu>
        </TextBox>
    </StackPanel>
</Grid>
</UserControl>

, Вы могли взять его немного далее и обработать команду в классе контроллера вместо этого и сделать его, который укусил больше MVC.

5
ответ дан Andrew Barrett 7 November 2019 в 07:37
поделиться

Я добрался, это для работы путем проверки полностью создает резервную копию через мой XAML...

box.Owner = DirectCast(DirectCast(DirectCast(Me.Parent, Grid).Parent, Grid).Parent, Window)

, Но это кажется довольно неэлегантным. Существует ли лучший путь?

0
ответ дан Zack Peterson 7 November 2019 в 07:37
поделиться

Что относительно того, чтобы менять имя окна к WindowMain1 или чему-то, и установить владельца на это?

0
ответ дан Davy8 7 November 2019 в 07:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: