我正在使用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>
答案 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上面只有一个文本块,没有别的。我添加了它,以便屏幕上显示某些内容。