在Xaml中,我可以为文本框添加自定义行为,如:
<TextBox>
<i:Interaction.Behaviors>
<My:TextBoxNewBehavior/>
</i:Interaction.Behaviors>
</TextBox>
我希望所有TextBox都有这种行为,那么如何将这种行为置于隐式样式中呢?
<Style TargetType="TextBox">
<Setter Property="BorderThickness" Value="1"/>
....
</Style>
更新: 谢谢你的信息。尝试下面建议的方式,应用程序崩溃:
<Setter Property="i:Interaction.Behaviors">
<Setter.Value>
<My:TextBoxNewBehavior/>
</Setter.Value>
</Setter>
我的行为是这样的:
public class TextBoxMyBehavior : Behavior<TextBox>
{
public TextBoxMyBehavior()
{
}
protected override void OnAttached()
{
base.OnAttached();
AssociatedObject.KeyUp += new System.Windows.Input.KeyEventHandler(AssociatedObject_KeyUp);
}
void AssociatedObject_KeyUp(object sender, System.Windows.Input.KeyEventArgs e)
{
if (e.Key == Key.Enter)
{
//....
}
}
protected override void OnDetaching()
{
base.OnDetaching();
AssociatedObject.KeyUp -= new System.Windows.Input.KeyEventHandler(AssociatedObject_KeyUp);
}
}
TextBoxMyBehavior似乎没有出现在情报中。
答案 0 :(得分:4)
运行时错误说明
<Setter Property="i:Interaction.Behaviors">
<Setter.Value>
<My:TextBoxNewBehavior/>
</Setter.Value>
</Setter>
书写
<i:Interaction.Behaviors>
<My:TextBoxNewBehavior/>
</i:Interaction.Behaviors>
表示在XAML中使用隐式集合语法,该语法在Behaviors集合上调用Add()。
<强>解决方案强>
使用样式设置器编写您自己附加的属性,如下所示:
<Setter Property="my:TextBoxOptions.UseMyBehavior" Value="true" />
然后,您可以在附加的属性代码中创建和设置行为:
private static void OnUseMyBehaviorPropertyChanged(DependencyObject dependencyObject, DependencyPropertyChangedEventArgs e)
{
if (e.NewValue.Equals(true))
Interaction.GetBehaviors(dependencyObject).Add(new TextBoxNewBehavior());
else { /*remove from behaviors if needed*/ }
}
答案 1 :(得分:0)
我已经在Windows 10项目中解决了它,但它应该兼容SL。
<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>
如果我以任何其他方式书写它不起作用,但作为资源,该集合有效!