HierarchicalDataTemplate的Expander中的超链接未触发HandleOnRequestNavigate事件

时间:2018-03-28 11:29:32

标签: c# wpf hyperlink treeview expander

我想我添加了所有必要的部分来为我的树视图添加自定义链接处理,但当我逐步调试调试器中的代码时,我发现后面的代码永远不会被调用。

我试图像我这样添加一个超链接到我的树视图:

<HierarchicalDataTemplate DataType="{x:Type this:StructuredViewNode}" ItemsSource="{Binding Children}">

<Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="auto"/>
    </Grid.ColumnDefinitions>
    <Grid.RowDefinitions>
        <RowDefinition Height="auto"/>
    </Grid.RowDefinitions>


    <TextBlock Grid.Column="0" Grid.Row="0" Margin="3" TextWrapping="WrapWithOverflow">
        <Hyperlink NavigateUri="{Binding Reference}" RequestNavigate="HandleOnRequestNavigate" >
            <TextBlock Text="{Binding ObjectName}"/>
        </Hyperlink>
    </TextBlock> 

</Grid>

</HierarchicalDataTemplate>

我有所需的代码:

private void HandleOnRequestNavigate(object sender, RequestNavigateEventArgs e)
{
    // Do custom link handling
    e.Handled = true;
}

也许有趣的是,树有自定义样式,超链接所在的部分是扩展器,定义如下:

<Expander Name="Exp" IsExpanded="{Binding IsExpanded, RelativeSource={RelativeSource TemplatedParent}}" >
    <Expander.Header>
        <!-- Displays the item's header in the Expander. -->
        <ContentPresenter ContentSource="Header" />
    </Expander.Header>
    <StackPanel>
        <Separator Margin="5" Width="Auto" Background="{StaticResource ItemBorderBrush}" Height="6" ></Separator>
        <!-- Displays the item's children. -->
        <ItemsPresenter />
    </StackPanel>
</Expander>

有人知道为什么我的超链接处理代码没有被调用吗?

提前致谢!

2 个答案:

答案 0 :(得分:1)

感谢; 为了总结我们的交换,超链接仅接受有效的URL作为Uri对象或字符串,并且仅在该情况下将触发导航事件。如果是businnes对象,请将其更改为蓝色前景Label控件,更改Cursor = Cursors.Hand,在viewmodel中处理click事件或自定义MVVM命令。这样做的伎俩。 : - )

答案 1 :(得分:0)

原来问题是你只能将strings作为URI。因此,最简单的解决方案似乎是编写转换器并添加如下对象:

<Hyperlink NavigateUri="{Binding ObjectReference,  
                         Converter={StaticResource ObjectToStringConverter}}" 
           RequestNavigate=""HandleOnRequestNavigate">
    <TextBlock Text="{Binding ObjectReference}"/>
</Hyperlink>