前些天,看到有網友給我留言,說AdaptiveTrigger在自定義控件(模板化控件)中不能觸發。因為當時我正在寫其他的代碼,就沒有去做實驗來驗證,於是我就給這位網友提了使用GotoVisualState的方法來自己切換狀態。
今天有空,我就做了做測試,發現AdaptiveTrigger觸發器在模板化控件的控件件模板中是可以觸發的。
首先,向應用程序項目添加一個新的模板化控件,我叫它為MyControl。如下圖。
然后打開Generic.xaml文件,找到新控件的樣式,將模板修改為:
<ControlTemplate TargetType="local:MyControl"> <Border Background="{TemplateBinding Background}" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" x:Name="bd"> <VisualStateManager.VisualStateGroups> <VisualStateGroup> <VisualState> <VisualState.StateTriggers> <AdaptiveTrigger MinWindowWidth="700" /> </VisualState.StateTriggers> <VisualState.Setters> <Setter Target="bd.Background" Value="Red" /> </VisualState.Setters> </VisualState> </VisualStateGroup> </VisualStateManager.VisualStateGroups> </Border> </ControlTemplate>
上面模板中應用了可視化狀態,並且狀態用AdaptiveTrigger來觸發,當應用程序窗口的寬度>= 700時就會觸發,把模板中Border的背景顏色改為紅色。
然后打開MainPage,在頁面上聲明一個MyControl實例。
<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}"> <local:MyControl /> </Grid>
最后,運行應用程序,效果如下。
隨后,把窗口的寬度拉大,會看到背景變成了紅色。
通過這個試驗,我發現:AdaptiveTrigger觸發器在自定義控件的模板中是可以使用的。