2011-04-23 10 views
12

que quiero lograr lo siguiente:Utilización de los elementos de WPF DataGridHyperLinkColumn para abrir el Explorador de Windows y archivos abiertos

Crear una cuadrícula de datos de WPF que tiene 2 columnas:

La primera tendrá artículos mostrando caminos de directorios, en una estilo de hipervínculo. Al hacer clic en un hipervínculo se abrirá el Explorador de Windows en la ruta especificada por el elemento.

El segundo tendrá elementos que muestran las rutas a los archivos, en un estilo de hipervínculo. Al hacer clic en un hipervínculo se iniciará el archivo, con la aplicación predeterminada definida por Windows.

No sé si es la opción correcta, pero agregué DataGridHyperlinkColumn a mi DataGrid. Un problema fue agregar elementos de URI que no hacen referencia a ubicaciones de Internet. Otro problema fue manejar los clics de una manera que no abre un navegador web.

¿Alguien puede ayudar?

Respuesta

33

Esto funciona universalmente:

<DataGridHyperlinkColumn Binding="{Binding Link}"> 
    <DataGridHyperlinkColumn.ElementStyle> 
     <Style> 
      <EventSetter Event="Hyperlink.Click" Handler="DG_Hyperlink_Click"/> 
     </Style> 
    </DataGridHyperlinkColumn.ElementStyle> 
</DataGridHyperlinkColumn> 
private void DG_Hyperlink_Click(object sender, RoutedEventArgs e) 
{ 
    Hyperlink link = (Hyperlink)e.OriginalSource; 
    Process.Start(link.NavigateUri.AbsoluteUri); 
} 

Si el URI señala un sitio web que se abrirá con el navegador web por defecto, si se trata de una carpeta que se abrirá en el explorador, si es un archivo que se abrirá con la aplicación predeterminada asociada a él.


utilizar esto para las columnas generadas automáticamente su propiedad tiene que ser de tipo Uri por lo que se genera un DataGridHyperlinkColumn. A continuación, puede conectar el evento colocando el estilo en el DataGrid.Resources:

<DataGrid.Resources> 
    <Style TargetType="Hyperlink"> 
     <EventSetter Event="Click" Handler="DG_Hyperlink_Click"/> 
    </Style> 
</DataGrid.Resources> 
+0

Hermoso, gracias! Por cierto, ¿cómo se hace esto cuando las columnas se autogeneran (desde una tabla de datos en mi caso)? – Yoni

+0

Agregué algo de información con respecto a mi respuesta, pero no sé si eso funciona para 'DataTables' ya que nunca los usé (debe tener una' Uri'-Property). –

+0

¿Es posible especificar un enlace que no sea el enlazado? – flux

Cuestiones relacionadas