【WPF】TextBlockの見た目を変えないでURLをリンクする

意外とパッとできなかった(wpfはいつもこうだ)のでメモ

HyperLinkの貼り方

HyperLinkがあるけどNavigateUriを指定するだけでは飛んでくれないRequestNavigateを指定してコード側で飛ばす

<Hyperlink
       NavigateUri=任意のURL
       RequestNavigate="Hyperlink_RequestNavigate"
       >
  Click Here
</HyperLink>
private void Hyperlink_RequestNavigate(object sender, System.Windows.Navigation.RequestNavigateEventArgs e)
{
    System.Diagnostics.Process.Start(e.Uri.ToString());
}

TextBlockと見た目を揃える

<TextBlock Style=任意のスタイル>
   <Hyperlink
       NavigateUri=任意のURL
       RequestNavigate="Hyperlink_RequestNavigate"
       >
       <Hyperlink.Style>
           <Style TargetType="Hyperlink">
               <Setter Property="Foreground" Value="{Binding Foreground,RelativeSource={RelativeSource FindAncestor,AncestorType=TextBlock}}"/>
               <Setter Property="TextDecorations" Value=""/>
           </Style>
       </Hyperlink.Style>                       
       Click Here
   </Hyperlink>
</TextBlock>
・親のTextBlockからForegroundの色をHyperLinkのものにバインドする
・マウスホバーしたときアンダーバーが出るのでTextDecorationsを空にする

スタイルによってはもうちょっといじらないとだめかも

参考

https://stackoverflow.com/questions/2092890/add-hyperlink-to-textblock-wpf

https://stackoverflow.com/questions/1252889/changing-hyperlink-foreground-without-losing-hover-color

https://stackoverflow.com/questions/2247987/styling-both-hyperlink-and-textblock-with-a-single-style

もしお役に立ちましたらスキ(♡マーク)をお願いします!!! noteアカウントがなくても大丈夫です。サポートもお待ちしています!