我想我添加了所有必要的部分来为我的树视图添加自定义链接处理,但当我逐步调试调试器中的代码时,我发现后面的代码永远不会被调用。
我试图像我这样添加一个超链接到我的树视图:
<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>
有人知道为什么我的超链接处理代码没有被调用吗?
提前致谢!
答案 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>