Widziałem kilka sugestii, że możesz dodać hiperłącze do aplikacji WPF poprzez Hyperlink
sterowanie.
Oto jak próbuję go użyć w moim kodzie:
<Window
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"
mc:Ignorable="d"
x:Class="BookmarkWizV2.InfoPanels.Windows.UrlProperties"
Title="UrlProperties" Height="754" Width="576">
<Grid>
<Grid.RowDefinitions>
<RowDefinition></RowDefinition>
<RowDefinition Height="40"/>
</Grid.RowDefinitions>
<Grid>
<ScrollViewer ScrollViewer.VerticalScrollBarVisibility="Auto" Grid.RowSpan="2">
<StackPanel >
<DockPanel LastChildFill="True" Margin="0,5">
<TextBlock Text="Url:" Margin="5"
DockPanel.Dock="Left" VerticalAlignment="Center"/>
<TextBox Width="Auto">
<Hyperlink NavigateUri="http://www.google.co.in">
Click here
</Hyperlink>
</TextBox>
</DockPanel >
</StackPanel>
</ScrollViewer>
</Grid>
<StackPanel HorizontalAlignment="Right" Orientation="Horizontal" Margin="0,7,2,7" Grid.Row="1" >
<Button Margin="0,0,10,0">
<TextBlock Text="Accept" Margin="15,3" />
</Button>
<Button Margin="0,0,10,0">
<TextBlock Text="Cancel" Margin="15,3" />
</Button>
</StackPanel>
</Grid>
</Window>
Otrzymuję następujący błąd:
Właściwość „Tekst” nie obsługuje wartości typu „Hiperłącze”.
Co ja robię źle?
RequestNavigateEventArgs
znajduje się wSystem.Windows.Navigation
przestrzeni nazw.Process
iProcessStartInfo
oba znajdują się wSystem.Diagnostics
przestrzeni nazw.Oprócz odpowiedzi Fuji, możemy sprawić, by program obsługi był wielokrotnego użytku, zamieniając go w dołączoną właściwość:
I użyj tego w ten sposób:
źródło
Hyperlink
to nie kontrola, to zawartość przepływu elementu, można użyć go tylko w kontroli, które treści przepływu wsparcie, jakTextBlock
.TextBoxes
mają tylko zwykły tekst.źródło
Jeśli chcesz później zlokalizować ciąg znaków, to te odpowiedzi nie wystarczą, proponuję coś takiego:
źródło
IMHO najprostszym sposobem jest użycie nowej kontroli odziedziczonej z
Hyperlink
:źródło
Zauważ też, że
Hyperlink
nie musi być używany do nawigacji. Możesz połączyć go z poleceniem.Na przykład:
źródło
Użyłem odpowiedzi w tym pytaniu i mam z tym problem.
Zwraca wyjątek:
{"The system cannot find the file specified."}
Po krótkim śledztwie. Okazuje się, że jeśli aplikacja WPF jest .CORE trzeba zrobić
UseShellExecute
abytrue
.Jest to wspomniane w Microsoft Docs :
Aby to zadziałało, musisz dodać
UseShellExecute
dotrue
:źródło
UseShelExecute = true
jakimkolwiek pomysłem, dlaczego?Process.Start(new ProcessStartInfo(e.Uri.AbsoluteUri) { UseShellExecute = true });
i otrzymuję błąd „System.ComponentModel.Win32Exception:„ System nie może znaleźć określonego pliku ””, gdy próbuję skorzystać z hiperłączaPodobał mi się pomysł Arthura dotyczący obsługi wielokrotnego użytku, ale myślę, że jest na to prostszy sposób:
Oczywiście rozpoczęcie jakiegokolwiek procesu może wiązać się z zagrożeniami dla bezpieczeństwa, więc bądź ostrożny.
źródło
Mam nadzieję, że to również komuś pomoże.
źródło
Moim zdaniem jednym z najpiękniejszych sposobów (ponieważ jest teraz powszechnie dostępny) jest używanie zachowań.
To wymaga:
Microsoft.Xaml.Behaviors.Wpf
kod XAML:
I
kod zachowania:
źródło