单击“链接”后,WPF Modern UI会弹出一个现代对话框

时间:2018-02-08 11:40:51

标签: c# wpf modern-ui

我正在使用WPF Modern UI,我在点击ModernDialog后尝试弹出Link。 问题是链接只有Source选项,我不想要转到另一个页面(只想弹出一个ModernDialog)。 我发现了这个:How to open a new window click on a menu link in Modern UI wpf? 但它只在第一次点击时弹出窗口,它也会转到第一个标签页(我的意思是我所查看的页面的“父”)。

有没有人有想法?有可能吗?

这是我的代码(相关部分),我在谈论“连接”链接:

 <mui:ModernWindow.TitleLinks>
        <mui:Link x:Name="connect" DisplayName="connect"/>
        <mui:Link DisplayName="settings" Source="/Pages/SettingsPage.xaml" />
        <mui:Link DisplayName="help" Source="https://github.com" />
    </mui:ModernWindow.TitleLinks>

2 个答案:

答案 0 :(得分:2)

您可以覆盖OnApplyTemplate()的{​​{1}}方法,并添加ModernWindow命令绑定到NavigateLink。如果您未设置ModernFrame的{​​{1}}属性,则命令参数将为null

Source

<强> XAML:

Link

答案 1 :(得分:1)

我采取不同的方法。

加载MainWindow后,找到ModernFrame并挂钩导航事件。

在导航事件处理程序中,检查源是否以&#34;对话框开头:&#34; (任意字符串,使用你想要的任何东西)然后显示你的对话框并取消导航。

链接的来源设置为&#34;对话框:测试&#34;表示我想要显示&#34;测试&#34;对话框。

MainWindow.xaml

<mui:ModernWindow x:Class="WpfApp17.MainWindow"
        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:mui="http://firstfloorsoftware.com/ModernUI"
        xmlns:local="clr-namespace:WpfApp17"
        mc:Ignorable="d"
        Loaded="ModernWindow_Loaded"
        ContentSource="/UserControl1.xaml"
        Title="MainWindow" Height="350" Width="525">
    <mui:ModernWindow.TitleLinks>
        <mui:Link x:Name="connect" DisplayName="connect" Source="dialog:Test" />
    </mui:ModernWindow.TitleLinks>
</mui:ModernWindow>

MainWindow.xaml.cs

using System.Collections.Generic;
using System.Linq;
using System.Windows;
using System.Windows.Media;
using FirstFloor.ModernUI.Windows.Controls;

namespace WpfApp17
{
    public partial class MainWindow : ModernWindow
    {
        public MainWindow()
        {
            InitializeComponent();
        }

        private void ModernWindow_Loaded(object sender, RoutedEventArgs e)
        {
            var frame = VisualTreeHelperFindChildren<ModernFrame>(this).FirstOrDefault();
            if (frame != null)
                frame.Navigating += Frame_Navigating;
        }

        private void Frame_Navigating(object sender, FirstFloor.ModernUI.Windows.Navigation.NavigatingCancelEventArgs e)
        {
            string dialog = "dialog:";
            if (e.Source.OriginalString.StartsWith(dialog))
            {
                // Show dialog
                var dialogName = e.Source.OriginalString.Remove(0, dialog.Length);
                MessageBox.Show($"Show Dialog '{dialogName}'");
                e.Cancel = true;
            }
        }

        public static List<T> VisualTreeHelperFindChildren<T>(DependencyObject parent) where T : class
        {
            List<T> list = new List<T>();

            if (parent != null)
            {
                int count = VisualTreeHelper.GetChildrenCount(parent);
                for (int i = 0; i < count; i++)
                {
                    // Get object at index i
                    DependencyObject dobj = VisualTreeHelper.GetChild(parent, i);

                    if (dobj is T)
                    {
                        list.Add(dobj as T);
                    }

                    // Loop through its children
                    list.AddRange(VisualTreeHelperFindChildren<T>(dobj));
                }
            }
            return list;
        }

    }
}

BTW - UserControl1.xaml上面只有一个文本块,没有别的。我添加了它,以便屏幕上显示某些内容。