C# 风格化地使用行为
我有一个行为,我如何在TextBlock样式中使用它,以便它应用于所有TextBlockC# 风格化地使用行为,c#,wpf,attachedbehaviors,C#,Wpf,Attachedbehaviors,我有一个行为,我如何在TextBlock样式中使用它,以便它应用于所有TextBlock <TextBlock Grid.Row="0" Grid.Column="1" Text="{Binding Distance}" > <i:Interaction.Behaviors> <Behaviors:EmptyToNaBehaviour/> </i:Interaction.Behaviors>
<TextBlock Grid.Row="0" Grid.Column="1" Text="{Binding Distance}" >
<i:Interaction.Behaviors>
<Behaviors:EmptyToNaBehaviour/>
</i:Interaction.Behaviors>
</TextBlock>
这是我附加的行为,基本上将空值更改为N/A
public class EmptyToNaBehaviour : Behavior<TextBlock>
{
protected override void OnAttached()
{
var txtblock = this.AssociatedObject as TextBlock;
if (txtblock != null && string.IsNullOrEmpty(txtblock.Text))
{
txtblock.Text = "N/A";
}
}
}
公共类EmptyToNaBehaviour:行为
{
受保护的覆盖无效附加()
{
var txtblock=this.AssociatedObject as TextBlock;
if(txtblock!=null&&string.IsNullOrEmpty(txtblock.Text))
{
txtblock.Text=“不适用”;
}
}
}
在WPF中实现行为基本上有两种不同的方式,通常称为附加行为和混合行为
附加的行为只是一个附加的属性,它附加了一个PropertyChangedCallback
更改处理程序,当依赖项属性的值更改时,该处理程序对它附加的DependencyObject
执行某些操作或扩展该对象
您通常将附加的行为定义为一个静态类,其中包含一组静态方法,这些静态方法获取并设置依赖项属性的值,并作为调用回调的结果执行所需的逻辑。您可以在样式中轻松设置任何此类特性的值:
<Setter Property="local:EmptyToNaBehaviour.SomeProperty" Value="x"/>
用法:
<TextBlock Grid.Row="0" Grid.Column="1" Text="text"
Behaviors:EmptyToNaBehaviour.Text="N/A">
</TextBlock>
<Style x:Key="style" TargetType="TextBlock">
<Setter Property="Behaviors:EmptyToNaBehaviour.Text" Value="N/A" />
</Style>
或以某种风格:
<TextBlock Grid.Row="0" Grid.Column="1" Text="text"
Behaviors:EmptyToNaBehaviour.Text="N/A">
</TextBlock>
<Style x:Key="style" TargetType="TextBlock">
<Setter Property="Behaviors:EmptyToNaBehaviour.Text" Value="N/A" />
</Style>
在WPF中实现行为基本上有两种不同的方式,通常称为附加行为和混合行为 附加的行为只是一个附加的属性,它附加了一个
PropertyChangedCallback
更改处理程序,当依赖项属性的值更改时,该处理程序对它附加的DependencyObject
执行某些操作或扩展该对象
您通常将附加的行为定义为一个静态类,其中包含一组静态方法,这些静态方法获取并设置依赖项属性的值,并作为调用回调的结果执行所需的逻辑。您可以在样式中轻松设置任何此类特性的值:
<Setter Property="local:EmptyToNaBehaviour.SomeProperty" Value="x"/>
用法:
<TextBlock Grid.Row="0" Grid.Column="1" Text="text"
Behaviors:EmptyToNaBehaviour.Text="N/A">
</TextBlock>
<Style x:Key="style" TargetType="TextBlock">
<Setter Property="Behaviors:EmptyToNaBehaviour.Text" Value="N/A" />
</Style>
或以某种风格:
<TextBlock Grid.Row="0" Grid.Column="1" Text="text"
Behaviors:EmptyToNaBehaviour.Text="N/A">
</TextBlock>
<Style x:Key="style" TargetType="TextBlock">
<Setter Property="Behaviors:EmptyToNaBehaviour.Text" Value="N/A" />
</Style>
我已将我附加的行为添加到没有依赖属性的问题中,您能否建议在这种情况下设置样式的解决方案。这是一种混合行为,正如前面提到的,您无法将这种行为应用到样式。但为什么您在这里使用行为?您可以轻松地在样式本身中实现相同的功能。是的,我尝试过,但我无法在同一属性“Text”上使用触发器和setter。我已将附加的行为添加到没有依赖属性的问题中,在这种情况下,你能提出一种设置风格的解决方案吗?这是一种混合行为,正如前面提到的,你不能将这种行为应用到一种风格上。但你为什么还要在这里使用一种行为呢?您可以轻松地在样式本身中实现相同的功能。是的,我尝试过,但是我不能在同一属性“Text”上使用trigger和setter。