none
silverlight 导航的问题,HyperlinkButton.TargetName 匹配不上 RRS feed

  • 问题

  • <UserControl xmlns:sdk="http://schemas.microsoft.com/winfx/2006/xaml/presentation/sdk"  x:Class="Test.MainPage"
        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:nczc='clr-namespace:NczControlLibrary.Controls;assembly=NczControlLibrary'
        mc:Ignorable="d"
        d:DesignHeight="300" d:DesignWidth="400">

        <Grid x:Name="LayoutRoot" Background="White">
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width='auto' MinWidth='200' MaxWidth='300'/>
                <ColumnDefinition Width='*'/>
            </Grid.ColumnDefinitions>
            <StackPanel Name='lb'>
                <HyperlinkButton TargetName='frame2' NavigateUri='/Pages/Page1.xaml' Content='{Binding RelativeSource={RelativeSource Mode= Self}, Path=NavigateUri}'/>
                <HyperlinkButton TargetName='frame' NavigateUri='/Pages/Page2.xaml' Content='{Binding RelativeSource={RelativeSource Mode= Self}, Path=NavigateUri}'/>
                <HyperlinkButton TargetName='frame2' NavigateUri='/Pages/Page3.xaml' Content='关键字编辑器'/>
                <HyperlinkButton TargetName='frame' NavigateUri='/Pages/Page4.xaml' Content='关于RichTextBox的内容模型考查1'/>
            </StackPanel>
            <Grid Grid.Column='1'>
                <Grid.RowDefinitions>
                    <RowDefinition Height='*'/>
                    <RowDefinition Height='*'/>
                </Grid.RowDefinitions>
                <sdk:Frame Grid.Row='0' x:Name='frame'/>
                <sdk:Frame Grid.Row='1' x:Name='frame2'/>
            </Grid>
        </Grid>
    </UserControl>


    project discovery developer

    2014年5月7日 14:21

答案

  • 楼主的Silverlight Runtime的Version是什么? Silverlight3的情况或许你应该将
    xmlns:sdk="http://schemas.microsoft.com/winfx/2006/xaml/presentation/sdk"  
    改为
    xmlns:sdk="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Navigation"

    但现在出问题了,根据上面的代码 4个hyp 1和3 与x:Name=frame 的匹配 2和4 与x:Name=frame2的匹配,应该点击它们的时候分别显示在这两个Frame其中之一才 是通常的理解, 为什么 现在点击这4个hyp~ 中任何一个都同时在这两个Frame中呈现导航的页面? 这是为什么??

    多个Frame的情况,需要分别添加 JournalOwnership="OwnsJournal" 定义。

    <sdk:Frame Grid.Row='0' x:Name='frame' JournalOwnership="OwnsJournal"/>
    <sdk:Frame Grid.Row='1' x:Name='frame2' JournalOwnership="OwnsJournal"/>

    • 已标记为答案 ProjectDD 2014年5月8日 11:20
    2014年5月8日 4:57

全部回复

  • 上面这段代码 4个hyp~ 随便点任何一个 都同时在两个frame中呈现,这不bug了吗? msdn的原话是:

    HyperlinkButton 导航到的 Silverlight 应用程序中的对象应实现此接口。</sentencetext> HyperlinkButton 将在可视化树中搜索与 HyperlinkButton  TargetName 属性匹配的指定 (x:Name 属性) 对象。</sentencetext> Navigate 方法,从而显示 URI 的内容。</sentencetext>

    http://msdn.microsoft.com/zh-cn/library/system.windows.controls.inavigate(v=vs.95).aspx

    这意思是说,HyperlinkButton.NavigateUri 设置以后 sl框架 将自动 搜索整个或相关的可视树,找到那些实现了INavigate接口的对象Frame就是这种对象,找到这些对象可能是一个集合,然后再根据 hyp~.TargetName 属性去匹配这个对象集合中的x:Name 如果匹配上了就调用该对象的 相关导航方法比如 .Navigate(...)等,以实现导航。 

    但现在出问题了,根据上面的代码 4个hyp 1和3 与x:Name=frame 的匹配 2和4 与x:Name=frame2的匹配,应该点击它们的时候分别显示在这两个Frame其中之一才 是通常的理解, 为什么 现在点击这4个hyp~ 中任何一个都同时在这两个Frame中呈现导航的页面? 这是为什么??

    大家可以剪下代码试试就知。


    project discovery developer


    2014年5月7日 14:31
  • 楼主的Silverlight Runtime的Version是什么? Silverlight3的情况或许你应该将
    xmlns:sdk="http://schemas.microsoft.com/winfx/2006/xaml/presentation/sdk"  
    改为
    xmlns:sdk="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Navigation"

    但现在出问题了,根据上面的代码 4个hyp 1和3 与x:Name=frame 的匹配 2和4 与x:Name=frame2的匹配,应该点击它们的时候分别显示在这两个Frame其中之一才 是通常的理解, 为什么 现在点击这4个hyp~ 中任何一个都同时在这两个Frame中呈现导航的页面? 这是为什么??

    多个Frame的情况,需要分别添加 JournalOwnership="OwnsJournal" 定义。

    <sdk:Frame Grid.Row='0' x:Name='frame' JournalOwnership="OwnsJournal"/>
    <sdk:Frame Grid.Row='1' x:Name='frame2' JournalOwnership="OwnsJournal"/>

    • 已标记为答案 ProjectDD 2014年5月8日 11:20
    2014年5月8日 4:57
  • 当然是最新的sl5

    ??!!果然可以了,这是为什么啊?层主可以给个解释吗?谢谢你的解答


    project discovery developer


    2014年5月8日 11:17