2

我有一个绑定到字符串的 ListBox ObservableCollection

每当 中的特定字符串值ObservableCollection包含文件的路径时,它应该显示为超链接,单击时应该打开文件。

如何在 ItemTemplate 中实现这一点?

4

1 回答 1

2

您可以使用DataTemplateSelector实现此目的

public class HyperlinkDataTemplateSelector : DataTemplateSelector
{
       public DataTemplate RegularTemplate { get; set; }

       public DataTemplate HyperlinkTemplate { get; set; }

       public override System.Windows.DataTemplate SelectTemplate(object item, System.Windows.DependencyObject container)
       {
             var str = item as string;

             // Check if str contains path and return the dataTemplate accordingly

             return // Either RegularTemplate or HyperlinkTemplate 
       }
}

在xml中

<local:HyperlinkDataTemplateSelector x:Key="itemTemplateSelector">
        <local:HyperlinkDataTemplateSelector.RegulatTemplate>
            <DataTemplate>
               <TextBlock Text="{Binding Path=YourProperty}"/>  
            </DataTemplate>
        </local:HyperlinkDataTemplateSelector.RegularTemplate>
        <local:HyperlinkDataTemplateSelector.HyperlinkTemplate>
            <DataTemplate>
                    <TextBlock>
                        <Hyperlink NavigateUri="{Binding Path=YourProperty}">
                           <TextBlock Text="{Binding Path=YourProperty}" />
                        </Hyperlink>   
                    </TextBlock>
            </DataTemplate>
        </local:HyperlinkDataTemplateSelector.HyperlinkTemplate>
</local:HyperlinkDataTemplateSelector>

在您的ListBox声明中使用您的DataTemplateSelector

 <ListBox ItemsSource="{Binding Path=YourCollection}" ItemTemplateSelector="{StaticResource itemTemplateSelector}">

希望这可以帮助

于 2013-09-28T20:26:31.790 回答