Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 风格化地使用行为_C#_Wpf_Attachedbehaviors - Fatal编程技术网

C# 风格化地使用行为

C# 风格化地使用行为,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样式中使用它,以便它应用于所有TextBlock

<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。