根据点击更改文本块的背景

时间:2014-01-03 19:32:10

标签: wpf xaml

我在这里有两个问题:

1

让我们看看下面的xaml:

<Style TargetType="TextBlock">
    <Style.Triggers>
        <EventTrigger RoutedEvent="MouseDown">
            <EventTrigger.Actions>
                <BeginStoryboard>
                    <Storyboard>
                        <ColorAnimation Storyboard.TargetProperty="Background.Color" To="LightBlue" Duration="0:0:0.100" />
                    </Storyboard>
                </BeginStoryboard>
            </EventTrigger.Actions>
        </EventTrigger>
    </Style.Triggers>
</Style>

<TextBlock Text="123" />
<TextBlock Text="abc" />

上述代码的当前行为:

单击text = 123的文本块时,其背景将更改为LightBlue。 现在如果我用text = abc点击文本块,它的背景将变为LightBlue。但是text = 123的textblock的背景仍然是LightBlue。

要求:

当我点击带有text = abc的textBlock时,我想用text = 123将textblock的背景更改为Transparent。

我应该对上面的xaml进行哪些更改才能获得所需的功能?

2

如何为多个元素设置相同Style的TargetType。

让我们说,

我也想使用上面代码中提到的TextBox样式,然后如何在不重复代码的情况下使用它而不使用x:Key属性?

2 个答案:

答案 0 :(得分:2)

对于第一个问题:我认为通过使用事件GotFocus可以轻松实现代码隐藏,这是当您通过键盘,鼠标单击文本框时触发的事件等...

对于第二个问题:您可以通过将TargetType设置为其父类来设置多个不同控件的目标类型,例如TargetType="{x:Type Control}"

有关详细信息(几乎相同的情况),请检查:

Can you define multiple TargetTypes for one XAML style?

答案 1 :(得分:1)

虽然Nirvana Priest回答了第二个问题。第一个问题的答案是为LostFocus写相同的触发器,如

<Style TargetType="TextBlock">
        <Style.Triggers>
            <EventTrigger RoutedEvent="MouseDown">
                <EventTrigger.Actions>
                    <BeginStoryboard>
                        <Storyboard>
                            <ColorAnimation Storyboard.TargetProperty="Background.Color" To="LightBlue" Duration="0:0:0.100" />
                        </Storyboard>
                    </BeginStoryboard>
                </EventTrigger.Actions>
            </EventTrigger>
            <EventTrigger RoutedEvent="LostFocus">
                <EventTrigger.Actions>
                    <BeginStoryboard>
                        <Storyboard>
                            <ColorAnimation Storyboard.TargetProperty="Background.Color" To="White" Duration="0:0:0.100" />
                        </Storyboard>
                    </BeginStoryboard>
                </EventTrigger.Actions>
            </EventTrigger>
        </Style.Triggers>
     </Style>

我希望这会有所帮助。