UWP XAMLはスタイルのトリガーをサポートしていないようです。次のようなトリガーを実行するための一般的な回避策は何ですか?
<Style TargetType="Button">
<Style.Triggers>
<Trigger Property="Visibility" Value="Collapsed">
<Setter Property="Text" Value="" />
</Trigger>
</Style.Triggers>
</Style>
現在、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>
ElementNameなしのソリューションがあれば、すばらしいでしょう。 AncestorTypeを使用してWPFでこれを行ったはずですが、UWPでもそれがありません。とにかく、Core:DataTriggerBehavior
スタイルで。
WinRTでは、 RelativeSourceMode はSelfおよびTemplatedParentモードのみをサポートし、FindAncestor 利用できません。したがって、 XAML Behaviors を使用する場合、回避策としてElementName
を使用する必要があります。また、プロジェクトでDataContextまたはViewModelを使用している場合は、ElementName
を使用しないようにDataContextまたはViewModelにバインドできます。例えば:
<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>
上記で使用した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"));
}
}
}
}