Xaml 自适应触发器在用户控件中不起作用
我正在开发UWP应用程序。我已经在使用自适应触发器根据窗口的宽度来调整xaml,而且它可以工作。。只有一页 现在我想对用户控件的xaml执行同样的操作,但它不起作用。。然而,我将VisualStateManager放在用户控件的根网格中 有区别吗 以下是我的用户控件的代码:Xaml 自适应触发器在用户控件中不起作用,xaml,uwp,Xaml,Uwp,我正在开发UWP应用程序。我已经在使用自适应触发器根据窗口的宽度来调整xaml,而且它可以工作。。只有一页 现在我想对用户控件的xaml执行同样的操作,但它不起作用。。然而,我将VisualStateManager放在用户控件的根网格中 有区别吗 以下是我的用户控件的代码: <UserControl x:Class=.....> <UserControl.Resources> <ResourceDictionary> <
<UserControl
x:Class=.....>
<UserControl.Resources>
<ResourceDictionary>
<vm:ViewModelLocator x:Key="Locator"/>
<converters:BooleanToVisibilityConverter x:Key="BooleanToVisibilityConverter"/>
</ResourceDictionary>
</UserControl.Resources>
<UserControl.DataContext>
<Binding Path="MyUserControlVM" Source="{StaticResource Locator}"/>
</UserControl.DataContext>
<Grid x:Name="LayoutRoot" Background="white">
<VisualStateManager.VisualStateGroups>
<VisualStateGroup>
<VisualState x:Name="Narrow">
<VisualState.StateTriggers>
<AdaptiveTrigger MinWindowWidth="0" />
</VisualState.StateTriggers>
<VisualState.Setters>
<Setter Target="LastName.Foreground" Value="Red" />
<Setter Target="LastName.Fontsize" Value="10" />
<Setter Target="FirstName.Foreground" Value="Red"/>
</VisualState.Setters>
</VisualState>
<VisualState x:Name="Normal">
<VisualState.StateTriggers>
<AdaptiveTrigger MinWindowWidth="600" />
</VisualState.StateTriggers>
<VisualState.Setters>
<Setter Target="LastName.Foreground" Value="Red" />
<Setter Target="LastName.Fontsize" Value="25" />
<Setter Target="FirstName.Foreground" Value="Red"/>
</VisualState.Setters>
</VisualState>
<VisualState x:Name="Wide">
<VisualState.StateTriggers>
<AdaptiveTrigger MinWindowWidth="1000"/>
</VisualState.StateTriggers>
<VisualState.Setters>
<Setter Target="LastName.Foreground" Value="Red" />
<Setter Target="FirstName.Foreground" Value="Red"/>
</VisualState.Setters>
</VisualState>
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>
<Listbox>
...
</ListBox>
<TextBlock x:Name="lblNoData" Grid.ColumnSpan="2" Text="No Data" Visibility="{Binding NoDataVisible, Converter={StaticResource BooleanToVisibilityConverter}}"/>
<ProgressRing x:Name="prLoading" Width="60" Height="60" Foreground="Blue" IsActive="{Binding InitializationNotifier.IsNotCompleted}" />
</Grid>
LastName和FirstName是我的列表框的DataTemplate中的文本块。我只是想把我的文字改成红色,看看触发器什么时候起作用
我在一个简单的页面中调用用户控件,如下所示:
<Grid x:Name="LayoutRoot" Background="{StaticResource white}">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<StackPanel Grid.Row="0" Margin="0,0,0,10">
...
</StackPanel>
<Grid x:Name="ContentPanel" Grid.Row="1" Margin="10,0">
<UC:MyUserControl/>
</Grid>
</Grid>
我不明白为什么这个代码不起作用。提前感谢您的帮助
LastName和FirstName是我的列表框的DataTemplate中的文本块。我只是想把我的文字改成红色,看看触发器什么时候起作用
您可以参考我的另一个答案,正如我在该答案中所说的,当控件放置在DataTemplate中时,它们将成为数据对象的可视结构。我认为只有在xaml代码中没有干净的方法来完成这项工作,这里的数据绑定是您的朋友
从你的代码我可以看到你想改变前景,但所有的红色?数据模板内部文本块的大小取决于窗口的大小。因此,您可以将这两个属性绑定到窗口的大小,也可以在更改窗口大小时使用来选择不同的模板 谢谢,这就是我想要的解释!