0
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”(类型“对象”)

有什么我想念的吗?

4

0 回答 0