0

短いバージョン: DependencyObject 内にある下線付きのものに下線を引きたいと思います。たとえば、この場合、フォントのサイズと色を設定できますが、下線を引くように設定することはできません。

<StackPanel TextElement.FontWeight="Bold" TextElement.Foreground="Red" Inline.TextDecorations="Underline">
    <TextBlock Text="This ">
    </TextBlock>
    <TextBlock><Run Text="is "></Run><Run Text="a test"></Run></TextBlock>
</StackPanel>

では、すべてのテキストに下線を引くように 1 つの場所を指定するにはどうすればよいでしょうか?

長いバージョン: ContentPresenter のように機能するハイパーリンク コントロールを作成しています。ハイパーリンク コントロールを使用するプログラマーは、コンテンツをコントロールに配置し、DataTemplate を指定してそのコンテンツを表示できます。MouseOver では、フォントを赤に設定し、テキストに下線を引くトリガーが必要です。色を赤に変更するのは非常に簡単ですが、下線が問題になることがわかっています。

<Trigger Property="IsMouseOver" Value="True">
    <Setter Property="Inline.TextDecorations" Value="Underline"></Setter>
    <Setter Property="TextElement.Foreground" Value="{Binding RelativeSource={RelativeSource AncestorType={x:Type local:ContentHyperlink}}, Path=ActiveColor}"></Setter>
</Trigger>
4

1 に答える 1

0

コメントに投稿されたリンクを見ると、これを行うための適切なxamlの方法がない可能性があります。私は現在C#コードを使用していますが、十分に機能します。コミュニティの利益のために、ここに私の解決策があります。これをより良くする方法についてのコメントは大歓迎です。MouseLeaveイベントとMouseEnterイベントをトラップし、そこに下線を表示します。

    void Control_MouseLeave(object sender, System.Windows.Input.MouseEventArgs e)
    {
        WPFHelper.EnumerateChildren<TextBlock>(this, true).ForEach(c => c.TextDecorations = null);
    }

    void Control_MouseEnter(object sender, System.Windows.Input.MouseEventArgs e)
    {
        WPFHelper.EnumerateChildren<TextBlock>(this, true).ForEach(c => c.TextDecorations = TextDecorations.Underline);
    }

WPFHelperクラスは、DependencyObjectのすべての子を単純に列挙し、ForEachは、各アイテムのラムダ式内のアクションを実行するだけの拡張メソッドです。

于 2012-10-30T03:13:23.763 に答える