我有很多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继承
为什么我不能这样做?可能还有其他办法可以做我想做的事情吗?
答案 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"
。