Что означает "#1" в "/Content/LoremIpsum.xaml#1" современного пользовательского интерфейса для WPF?
Я смотрю в ModernUI
В эти дни у меня есть небольшая проблема с изменением моего кода. Проблема исходит от TabControl
, Образец из MUI DOC
как:
<Grid Style="{StaticResource ContentRoot}">
<mui:ModernTab SelectedSource="/Content/LoremIpsum.xaml#1" Layout="List">
<mui:ModernTab.Links>
<mui:Link DisplayName="Lorem Ipsum 1" Source="/Content/LoremIpsum.xaml#1" />
<mui:Link DisplayName="Lorem Ipsum 2" Source="/Content/LoremIpsum.xaml#2" />
</mui:ModernTab.Links>
</mui:ModernTab>
</Grid>
Может ли кто-нибудь объяснить мне использование #1
в коде выше?
1 ответ
В этой ситуации используется фрагмент навигации. Это означает, что при использовании выбранного источника привязки в вашем ViewModel
, вы можете просто разобрать все после #
найти свой index
выбранной вкладки. Вы должны слушать событие типа SourceChanged
, чтобы узнать, какая вкладка была выбрана пользователем или с помощью OnFragmentNavigation
событие.
Для этого использовали следующий код:
namespace FirstFloor.ModernUI.Windows.Navigation
FragmentNavigationEventArgs.cs
/// <summary>
/// Provides data for fragment navigation events.
/// </summary>
public class FragmentNavigationEventArgs
: EventArgs
{
/// <summary>
/// Gets the uniform resource identifier (URI) fragment.
/// </summary>
public string Fragment { get; internal set; }
}
namespace FirstFloor.ModernUI.Windows
IContent.cs
/// <summary>
/// Defines the optional contract for content loaded in a ModernFrame.
/// </summary>
public interface IContent
{
/// <summary>
/// Called when navigation to a content fragment begins.
/// </summary>
/// <param name="e">An object that contains the navigation data.</param>
void OnFragmentNavigation(FragmentNavigationEventArgs e);
...
}
namespace FirstFloor.ModernUI.Windows.Navigation
NavigationHelper.cs
/// <summary>
/// Removes the fragment from specified uri and return it.
/// </summary>
/// <param name="uri">The uri</param>
/// <returns>The uri without the fragment, or the uri itself if no fragment is found</returns>
public static Uri RemoveFragment(Uri uri)
{
string fragment;
return RemoveFragment(uri, out fragment);
}
/// <summary>
/// Removes the fragment from specified uri and returns the uri without the fragment and the fragment itself.
/// </summary>
/// <param name="uri">The uri.</param>
/// <param name="fragment">The fragment, null if no fragment found</param>
/// <returns>The uri without the fragment, or the uri itself if no fragment is found</returns>
public static Uri RemoveFragment(Uri uri, out string fragment)
{
fragment = null;
if (uri != null) {
var value = uri.OriginalString;
var i = value.IndexOf('#');
if (i != -1) {
fragment = value.Substring(i + 1);
uri = new Uri(value.Substring(0, i), uri.IsAbsoluteUri ? UriKind.Absolute : UriKind.Relative);
}
}
return uri;
}
Также вы можете увидеть пример, где используется навигация вместе с IContent
Интерфейс в этом вопросе: