ポップアップウインドウにビヘイビアをセットする
やりたいこと
Prismのポップアップウインドウにビヘイビアをセットする。
実装
PopupWindowActionには、スタイルは指定できるがビヘイビアは指定できない。そこで、ビヘイビアをスタイルで指定できるようにすることで、ポップアップウインドウにビヘイビアをセットする。
そのためにビヘイビアをスタイルとして追加できるコレクションクラスを用意する。
ビヘイビアのコレクション
using System.Linq;
using System.Windows;
using System.Windows.Interactivity;
namespace Sample {
public class StyleBehaviorCollection : FreezableCollection<Behavior> {
public static readonly DependencyProperty StyleBehaviorsProperty
= DependencyProperty.RegisterAttached(
"StyleBehaviors",
typeof(StyleBehaviorCollection),
typeof(StyleBehaviorCollection),
new PropertyMetadata(StyleBehaviors_PropertyChanged));
public static StyleBehaviorCollection GetStyleBehaviors(DependencyObject obj)
=> (StyleBehaviorCollection)obj.GetValue(StyleBehaviorsProperty);
public static void SetStyleBehaviors(DependencyObject obj, StyleBehaviorCollection value)
=> obj.SetValue(StyleBehaviorsProperty, value);
protected override Freezable CreateInstanceCore()
=> new StyleBehaviorCollection();
private static void StyleBehaviors_PropertyChanged(DependencyObject sender, DependencyPropertyChangedEventArgs e) {
if (e.OldValue == e.NewValue)
return;
var value = e.NewValue as StyleBehaviorCollection;
if (value == null)
return;
var behaviors = Interaction.GetBehaviors(sender);
behaviors.Clear();
foreach (var b in value.Select(x => (Behavior)x.Clone())) {
behaviors.Add(b);
}
}
}
}
使い方
XAML
<Window x:Class="Sample.MainView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"
xmlns:prism="http://prismlibrary.com/"
xmlns:local="clr-namespace:Sample"
Title="MainView" Height="300" Width="300">
<i:Interaction.Triggers>
<prism:InteractionRequestTrigger SourceObject="{Binding OpenXXXDialogRequest}">
<prism:PopupWindowAction IsModal="True" CenterOverAssociatedObject="True" >
<prism:PopupWindowAction.WindowContent>
<local:XXXDialog />
</prism:PopupWindowAction.WindowContent>
<prism:PopupWindowAction.WindowStyle>
<Style TargetType="Window">
<Setter Property="local:StyleBehaviorCollection.StyleBehaviors">
<Setter.Value>
<local:StyleBehaviorCollection>
<local:YYYBehavior/>
</local:StyleBehaviorCollection>
</Setter.Value>
</Setter>
</Style>
</prism:PopupWindowAction.WindowStyle>
</prism:PopupWindowAction>
</prism:InteractionRequestTrigger>
</i:Interaction.Triggers>
<Grid>
<TextBox />
</Grid>
</Window>
XAML
<Window x:Class="Sample.MainView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"
xmlns:prism="http://prismlibrary.com/"
xmlns:local="clr-namespace:Sample"
Title="MainView" Height="300" Width="300">
<i:Interaction.Triggers>
<prism:InteractionRequestTrigger SourceObject="{Binding OpenXXXDialogRequest}">
<prism:PopupWindowAction IsModal="True" CenterOverAssociatedObject="True" >
<prism:PopupWindowAction.WindowContent>
<local:XXXDialog />
</prism:PopupWindowAction.WindowContent>
<prism:PopupWindowAction.WindowStyle>
<Style TargetType="Window">
<Setter Property="local:StyleBehaviorCollection.StyleBehaviors">
<Setter.Value>
<local:StyleBehaviorCollection>
<local:YYYBehavior/>
</local:StyleBehaviorCollection>
</Setter.Value>
</Setter>
</Style>
</prism:PopupWindowAction.WindowStyle>
</prism:PopupWindowAction>
</prism:InteractionRequestTrigger>
</i:Interaction.Triggers>
<Grid>
<TextBox />
</Grid>
</Window>
Author And Source
この問題について(ポップアップウインドウにビヘイビアをセットする), 我々は、より多くの情報をここで見つけました https://qiita.com/flasksrw/items/d6d3a39f66d12664cf11著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .