1

3 つのボタンを持つ WrapPanel があります。

<WrapPanel Orientation="Horizontal">
   <Button Content="Book1" />
   <Button Content="Book2" />
   <Button Content="Book3" />
</WrapPanel>

Book1 をクリックすると、Book1 のコンテンツが表示されます。Book2 をクリックすると、Book2 などのコンテンツが表示されます。ボタンをクリックすると取り消し線を引くことができるコマンドはありますか? Html には、テキストの「del」があります。

<del>Strikethrough</del>

私は同じがwpfとボタンで欲しい

ありがとうございました

4

1 に答える 1

2

クリック イベントで TextDecoration オブジェクトを TextBlock.TextDecorations コレクションに追加します (例):

XAML:

<Button Click="Button_Click_1">
   <TextBlock>
       Book 1
   </TextBlock>
</Button>

そしてハンドラー:

private void Button_Click_1(object sender, RoutedEventArgs e)
{
   // ... your logic

   var button = (Button)sender;
   var textBlock = (TextBlock)button.Content;

   // if decoration wasn't already inserted
   //
   if (!textBlock.TextDecorations.Any())
       textBlock.TextDecorations.Add(new TextDecoration { Location = TextDecorationLocation.Strikethrough });
 }

更新: コメントへの回答 - 最も簡単な方法

XAML

<Button x:Name="button1" Click="Button_Click_1">
            <TextBlock>
                Book 1
            </TextBlock>
        </Button>

        <Button x:Name="button2" Click="Button_Click_2">
            <TextBlock>
                Book 2
            </TextBlock>
        </Button>

コード:

private void SetStrikethrough(Button b, Boolean strikethrough)
        {
            var textBlock = (TextBlock)b.Content;

            if (strikethrough)
            {
                if (!textBlock.TextDecorations.Any())
                    textBlock.TextDecorations.Add(
                        new TextDecoration { Location = TextDecorationLocation.Strikethrough });
            }
            else
            {
                textBlock.TextDecorations.Clear();
            }
        }

        private void Button_Click_1(object sender, RoutedEventArgs e)
        {
            var button = (Button)sender;
            SetStrikethrough(button1, true);
            SetStrikethrough(button2, false);
        }

        private void Button_Click_2(object sender, RoutedEventArgs e)
        {
            var button = (Button)sender;
            SetStrikethrough(button2, true);
            SetStrikethrough(button1, false);
        }

このコードは、ボタンのコンテンツがテキストブロックであることを常に想定していることに注意してください。簡単にするために。

于 2013-01-31T10:03:32.147 に答える