Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.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
Wpf 触发器中的AdornedElement属性_Wpf_Binding_Triggers_Adorner - Fatal编程技术网

Wpf 触发器中的AdornedElement属性

Wpf 触发器中的AdornedElement属性,wpf,binding,triggers,adorner,Wpf,Binding,Triggers,Adorner,我在XAML中有一个用于错误验证的装饰器。基本上,我有一个网格,我想在两种情况下显示,如果AdornedElement是聚焦的或是结束的 下面是一个代码片段,在这里我成功地绑定到了AdornedElement的IsFocused,但正如您所知,它只解决了1/2的条件。现在,我不能将另一个绑定传递到转换器,也不能创建一个属性来处理这两个需要是XAML的解决方案 <AdornedElementPlaceholder x:Name="er

我在XAML中有一个用于错误验证的装饰器。基本上,我有一个网格,我想在两种情况下显示,如果AdornedElement是聚焦的或是结束的

下面是一个代码片段,在这里我成功地绑定到了AdornedElement的IsFocused,但正如您所知,它只解决了1/2的条件。现在,我不能将另一个绑定传递到转换器,也不能创建一个属性来处理这两个需要是XAML的解决方案

 <AdornedElementPlaceholder
                            x:Name="errorAdorner" />
                    ...

  <Grid
     x:Name="ErrorDetails"
     Visibility="{Binding ElementName=errorAdorner, Path=AdornedElement.IsFocused, Converter={StaticResource BooleanToVisibilityConverter}}" />

                   ...
我想做的是使用触发器来处理这个问题,唯一的问题是我无法访问触发器上的AdornedElement属性

像这样的

        <Trigger
            SourceName="errorAdorner"
            Property="AdornedElement.IsFocused"
            Value="True">
            <Setter
                TargetName="ErrorDetails"
                Property="Visibility"
                Value="Visible" />
        </Trigger>
这也会有帮助,因为我想做的是触发动画,而不仅仅是设置可见性


任何帮助都会很好。

您正在寻找的是一个名为a的文件,它内置于WPF中,但不在Silverlight中

<Grid>
    <Grid.Resources>
        <c:BooleanPairToVisibilityConverter x:Key="booleanPairToVisibility" />
    </Grid.Resources>
    <Grid.Visibility>
        <MultiBinding Converter="{StaticResource booleanPairToVisibility}">
            <Binding ElementName="errorAdorner" Path="AdornedElement.IsFocused" />
            <Binding ElementName="errorAdorner" Path="AdornedElement.IsMouseOver" />
        </MultiBinding>
    </Grid.Visibility>
</Grid>
诚然,这并不能解决第二个问题,即如何使用触发器来实现这一点。我不会


如果希望围绕ErrorDetails元素可见性的更改生成动画,请直接在visibility属性上设置触发器-当多重绑定导致DependencyProperty的值更改时,应调用该触发器。此外,可能值得考虑实现这一点,因为它们在附加简单动画时更为简单。

我也遇到过类似的情况,我想使用触发器。和你一样,我不能让它和普通人一起工作。但我最终发现,可以使用a来触发装饰元素的属性。Marco Zhou对的回答显示了要使用的语法

还显示了这种方法,并包括由于触发器而触发的动画

public class BooleanPairToVisibilityConverter : IMultiValueConverter {
    public object Convert( object[] values, Type targetType, object parameter, CultureInfo culture )
    {
        if ( 2 != values.Length ) throw new ArgumentException( "values" );
        return ( (bool)values[0] || (bool)values[1] ) ? Visibility.Visible : Visibility.Collapsed;
    }

    public object[] ConvertBack( object value, Type[] targetTypes, object parameter, CultureInfo culture )
    { throw new NotSupportedException(); }
}