设置AdaptiveTrigger.MinWindowWidth到TemplateBinding会导致触发器永远不会执行

本文关键字:触发器 永远 执行 MinWindowWidth TemplateBinding 设置 AdaptiveTrigger | 更新日期: 2023-09-27 18:16:54

目前我在generic.xaml中的一个自定义控件中有这段代码

<VisualStateManager.VisualStateGroups>
                        <VisualStateGroup x:Name="VisualStateGroup">
                            <VisualState x:Name="VisualStateNarrow">
                                <VisualState.StateTriggers>
                                    <AdaptiveTrigger x:Name="VisualStateNarrowTrigger" MinWindowWidth="{TemplateBinding VisualStateNarrowMinWidth}" />
                                </VisualState.StateTriggers>
                                <VisualState.Setters>
                                    <Setter Target="PART_SPACER.Visibility" Value="Visible" />
                                </VisualState.Setters>
                            </VisualState>
                            <VisualState x:Name="VisualStateNormal">
                                <VisualState.StateTriggers>
                                    <AdaptiveTrigger x:Name="VisualStateNormalTrigger" MinWindowWidth="{TemplateBinding VisualStateNormalMinWidth}"/>
                                </VisualState.StateTriggers>
                                <VisualState.Setters/>
                            </VisualState>
                        </VisualStateGroup>
</VisualStateManager.VisualStateGroups>

其中VisualStateNarrowMinWidthVisualStateNormalMinWidth是int类型的DependencyProperties,例如:

public int VisualStateNarrowMinWidth
        {
            get { return (int)GetValue(VisualStateNarrowMinWidthProperty); }
            set { SetValue(VisualStateNarrowMinWidthProperty, value); }
        }
        public static readonly DependencyProperty VisualStateNarrowMinWidthProperty =
            DependencyProperty.Register(nameof(VisualStateNarrowMinWidth), typeof(int), typeof(PageHeader), new PropertyMetadata(default(int)));

将MinWindowWidth设置为整数,如0表示窄,521表示正常,使其执行良好。我该如何让绑定工作呢?

设置AdaptiveTrigger.MinWindowWidth到TemplateBinding会导致触发器永远不会执行

绑定TemplatedParent,如下所示:

<AdaptiveTrigger x:Name="VisualStateNarrowTrigger" MinWindowWidth="{Binding VisualStateNarrowMinWidth, RelativeSource={RelativeSource TemplatedParent}}" />