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