将Interaction.Behaviors移动到样式,模板或其他内容

时间:2015-04-12 16:14:22

标签: xaml windows-8.1

我有很多XAML TextBlock,如下所示:

<TextBlock Text="{Binding InspectionCount}" Style="{StaticResource FilterText}">
  <i:Interaction.Behaviors>
    <core:EventTriggerBehavior EventName="Tapped">
      <core:InvokeCommandAction Command="{Binding SetModeToAll}" />
    </core:EventTriggerBehavior>
  </i:Interaction.Behaviors>
</TextBlock>

我想减少XAML代码的数量,并写下这样的内容:

<MyTextBlock Text="{Binding InspectionCount}" 
             Style="{StaticResource FilterText}" 
             Command="{Binding SetModeToAll}" />

我只知道这样做的一种方法 - 创建新类(继承自TextBlock),将AttachedProperty(Command)添加到新类,并为新类创建Style。

但看起来我不能从TextBlock继承我的类:

public sealed class FilterTextBlock : TextBlock
  

无法从密封类TextBlock继承

为什么我不能这样做?可能还有其他办法可以做我想做的事情吗?

2 个答案:

答案 0 :(得分:1)

我发现了以下作品。并解决了很多地方的问题,我将开始回答,请尝试以下方法!

<Page
x:Class="Example1.ListBoxTest"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:Example1"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:i="using:Microsoft.Xaml.Interactivity"
xmlns:core="using:Microsoft.Xaml.Interactions.Core"
mc:Ignorable="d">

<Page.Resources>
    <i:BehaviorCollection x:Key="behaviors">
        <core:EventTriggerBehavior EventName="Tapped">
            <core:InvokeCommandAction Command="{Binding SetModeToAll}" />
        </core:EventTriggerBehavior>
    </i:BehaviorCollection>

    <Style TargetType="TextBlock" x:Key="textblockstyle">
        <Setter Property="i:Interaction.Behaviors" Value="{StaticResource behaviors}">
        </Setter>
    </Style>
</Page.Resources>

<Grid x:Name="LayoutRoot" Background="Transparent">
    <TextBlock Text="Testing" Foreground="Red" FontSize="20" Style="{StaticResource textblockstyle}">
    </TextBlock >
</Grid>

很奇怪,如果我在行为中设置行为i:Interaction.Behaviors不起作用,但以这种方式调用Command! 请告诉我它也适用你!

答案 1 :(得分:1)

只需使用:

<Setter Property="i:Interaction.Behaviors">
    <Setter.Value>
        <i:BehaviorCollection>
            <MyCustomBehavior />
        </i:BehaviorCollection>
    </Setter.Value>
</Setter>

<Style TargetType="TextBlock"> 标签内。

不要忘记在页面顶部包含 xmlns:i="using:Microsoft.Xaml.Interactivity"