2016-08-19 12 views
-1

Ich drucke eine URL aus einem Datensatz in meiner XAML-Datei. Das Problem ist, dass ich nur einen Hyperlink erstellen muss, wenn die Zeichenfolge eine gültige URL ist.Erkennen, ob eine Zeichenfolge eine URL ist

Ich weiß, wie dies in den meisten Sprachen, aber nicht in WPF tun. Ich suche nach etwas, das funktioniert;

if(isurl) 
    display hyperline gridrow 
else 
    display string gridrow 

Mein Xaml ist derzeit;

<u:GridViewColumnEx x:Uid="column_4" Width="225" > 
    <GridViewColumn.CellTemplate> 
     <DataTemplate> 
      <TextBlock> 
       <Hyperlink> 
        <TextBlock Text="{Binding Data.path}"/> 
       </Hyperlink> 
      </TextBlock> 
     </DataTemplate> 
    </GridViewColumn.CellTemplate> 
</u:GridViewColumnEx> 

Aber das zeigt alles in der Spalte als Hyperlink (natürlich). Ich habe über Auslöser gelesen, bin mir aber nicht sicher, ob ich danach suche. Ich habe ziemlich viel über Trigger gelesen, bin aber unsicher, wie man den XAML basierend auf dem Rückgabewert ändert.

+4

"_Ich weiß, wie man das in den meisten Sprachen macht, aber nicht in WPF_" Also wissen Sie, wie man es in C# macht? Weil WPF nicht die Sprache ist .. –

+0

Sorry, ich verstehe die C# -Seite (meistens) aber nicht die XAML, sollte das klar gemacht haben; I.E Ich kann eine Methode in C# erstellen, um z. B. true zurückzugeben, wenn sie eine URL erkennt, oder false, wenn es sich nicht um eine URL handelt. Aber mein Problem wäre, diesen Wert auf den XAML anzuwenden, um entweder den URL- oder den Norma-Text anzuzeigen. – Dannys19

+3

Eins: http://stackoverflow.com/questions/7578857/how-to-check-whether-a-string-is-a-valid-http-url –

Antwort

1

Eine Möglichkeit, dieses Problem zu lösen, ist eine boolean Eigenschaft, die die Gültigkeit der URL angibt. Dann in XAML können Sie zwei Steuerelemente in datatemplateGridViewColumn.CellTemplate einen Hyperlink und anderen TextBlock haben. müssen Sie die Sichtbarkeit der durch die Verwendung Trigger für die Boolesche Eigenschaft basierte Steuerungen ändern:

   <DataTemplate> 
       <Grid> 
        <TextBlock Visibility="Collapsed" Name="Hyperlink"> 
      <Hyperlink NavigateUri="{Binding Data.path}"> 
      </Hyperlink> 
        </TextBlock> 
      <TextBlock Visibility="Collapsed" Name="simpleText" 
         Text="{Binding Data.path}"></TextBlock> 
       </Grid> 
       <DataTemplate.Triggers> 
        <DataTrigger Binding="{Binding Data.IsValidURL}" //your boolean property 
           Value="True"> 
      <Setter TargetName="Hyperlink" 
           Property="Vibility" 
           Value="Visible" /> 
        </DataTrigger> 
      <DataTrigger Binding="{Binding Data.IsValidURL}" //your boolean property 
           Value="False"> 
      <Setter TargetName="simpleText" 
        Property="Vibility" 
        Value="Visible" /> 
      </DataTrigger> 
      <DataTemplate.Triggers> 
      </DataTemplate> 
+0

Entschuldigung für die schlechte Formatierung. – Sameed

+0

Danke dafür, genau das, was ich gesucht habe! – Dannys19

+0

Warum nicht die Antwort bearbeiten und die schlechte Formatierung in eine gute Formatierung umwandeln? Zu faul? – Clemens

1

wenn Zeichenfolge Um zu überprüfen, um eine gültige URL ist:

bool CheckUrl(string urlString) 
{ 
    if(Uri.TryCreate(urlString, UriKind.Absolute, out uriResult)) 
    { 
    return (uriResult.Scheme == Uri.UriSchemeHttp); 
    } 
    return false; 
} 

Um den Text eines Hyperlinks basierend auf wahr oder false entfernt das Hyperlink-Element aus dem Xaml. Sie erstellen einen Hyperlink programmgesteuert basierend auf der URL.

if(CheckUrl(urlString)) 
{ 
    TextBlock.Inlines.Add(new Hyperlink (new Run("Click me")){NavigateUri = new Uri("urlString",UriKind.Absolute) }); 
} 
else 
{ 
    TextBlock.Text = urlString; 
} 
Verwandte Themen