Bri*_*ten 18 c# xaml win-universal-app visual-studio-2015 uwp
似乎UWP XAML不支持样式中的触发器.完成以下触发器的常见解决方法是什么?
<Style TargetType="Button">
<Style.Triggers>
<Trigger Property="Visibility" Value="Collapsed">
<Setter Property="Text" Value="" />
</Trigger>
</Style.Triggers>
</Style>
Run Code Online (Sandbox Code Playgroud)
目前我看到以下选项在UWP中完成触发器:
使用动画或VisualStateTriggers.如果我不使用它们来调整控件到屏幕,那么两者似乎都是错误的.
我想我找到了一般为控件实现触发器的正确方法.请参阅以下代码作为演示:
xmlns:Interactivity="using:Microsoft.Xaml.Interactivity"
xmlns:Core="using:Microsoft.Xaml.Interactions.Core"
<Border x:Name="BackgroundElement" Tag="Text">
<Interactivity:Interaction.Behaviors>
<Core:DataTriggerBehavior Binding="{Binding Tag, ElementName=BackgroundElement}" Value="Text">
<Core:ChangePropertyAction PropertyName="BorderBrush" Value="AliceBlue" />
</Core:DataTriggerBehavior>
</Interactivity:Interaction.Behaviors>
</Border>
Run Code Online (Sandbox Code Playgroud)
如果没有ElementName的解决方案,那将是非常棒的.我会在WPF中使用AncestorType完成此操作,但在UWP中也缺少这一点.无论如何,似乎你不能使用Core:DataTriggerBehavior
in样式.
在WinRT中,RelativeSourceMode仅支持Self和TemplatedParent模式,FindAncestor不可用.因此,当您使用XAML行为时,您需要将其ElementName
用作解决方法.如果您在项目中使用DataContext或ViewModel,则可以绑定到DataContext或ViewModel以避免使用ElementName
.例如:
<Page ...>
<Page.Resources>
<local:MyViewModel x:Key="ViewModel" />
</Page.Resources>
...
<Border x:Name="BackgroundElement" DataContext="{Binding Source={StaticResource ViewModel}}">
<Interactivity:Interaction.Behaviors>
<Core:DataTriggerBehavior Binding="{Binding Tag}" Value="Text">
<Core:ChangePropertyAction PropertyName="Background" Value="Red" />
</Core:DataTriggerBehavior>
</Interactivity:Interaction.Behaviors>
</Border>
...
</Page>
Run Code Online (Sandbox Code Playgroud)
以上使用的ViewModel:
public class MyViewModel : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
private string _tag;
public string Tag
{
get
{
return _tag;
}
set
{
_tag = value;
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs("Tag"));
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
9907 次 |
最近记录: |