internal class LayoutPresenterTypeSelector : Control
{
public ICommand ClearAreaCommand
{
get { return (ICommand)GetValue(ClearAreaCommandProperty); }
set { SetValue(ClearAreaCommandProperty, value); }
}
public WrapFieldBase LayoutField
{
get { return (WrapFieldBase)GetValue(LayoutFieldProperty); }
set { SetValue(LayoutFieldProperty, value); }
}
public static readonly DependencyProperty LayoutFieldProperty = DependencyProperty.Register("LayoutField", typeof(WrapFieldBase), typeof(LayoutPresenterTypeSelector), new PropertyMetadata(new WrapFieldBase() { FieldType = WrapFieldBase.FieldTypes.Empty }));
public static readonly DependencyProperty ClearAreaCommandProperty = DependencyProperty.Register("ClearAreaCommand", typeof(ICommand), typeof(LayoutPresenterTypeSelector), new PropertyMetadata(null));
}
控制模板
<ControlTemplate x:Key="LayoutPresenterTypeSelectorControlTemplate" TargetType="{x:Type local:LayoutPresenterTypeSelector}">
<Border BorderThickness="0" Background="{TemplateBinding Background}">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Button Grid.Column="5" Content="Clear All" Command="{Binding ClearAreaCommand, RelativeSource={RelativeSource AncestorType=local:LayoutPresenterTypeSelector}}" x:Name="PART_Clear" IsEnabled="False" Height="30"/>
</Grid>
</Border>
<ControlTemplate.Triggers>
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding LayoutField.FieldType, RelativeSource={RelativeSource AncestorType=local:LayoutPresenterTypeSelector}}" Value="Notes"/>
</MultiDataTrigger.Conditions>
<Setter TargetName="PART_Clear" Property="IsEnabled" Value="true"/>
</MultiDataTrigger>
</ControlTemplate.Triggers>
WrapFieldBase
internal class WrapFieldBase : INotifyPropertyChanged
{
public enum FieldTypes { Notes, Order, Empty }
public int RowIndex { get; set; }
public int RowSpan { get; set; }
public int ColumnIndex { get; set; }
public int ColumnSpan { get; set; }
public SolidColorBrush Background { get; set; }
public FieldTypes FieldType { get; set; }
public Thickness Margin { get; set; }
public void NotifyPropertyChanged(string property) => PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(property));
public event PropertyChangedEventHandler PropertyChanged;
}
我已经发布了所有的源代码,
我的问题是MultiDataTrigger
无法到达LayoutField.LayoutType
酒店。
应用程序运行时,我在输出窗口中收到此错误。无法通过引用“RelativeSource FindAncestor,AncestorType='StyleTest.LayoutPresenterTypeSelector',AncestorLevel='1'”找到绑定源。BindingExpression:Path=LayoutField.FieldType; 数据项=空;目标元素是'LayoutPresenterTypeSelector'(名称='PresenterSelector');目标属性是“NoTarget”(类型“对象”)
有什么我想念的吗?