আমি ডাব্লুপিএফ ব্যবহারকারীকন্ট্রোলগুলিতে একটি লোডিং ইভেন্ট সরবরাহ করতে নিম্নলিখিত ইন্টারঅ্যাক্টিভিটি আচরণ ব্যবহার করি। আপনি ব্যবহারকারীর নিয়ন্ত্রণ XAML এ আচরণটি অন্তর্ভুক্ত করতে পারেন। সুতরাং আপনি প্রতিটি একক ব্যবহারকারীকে এই যুক্তি না রেখে কার্যকারিতা রাখতে পারেন।
এক্সএএমএল ঘোষণা:
xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"
<i:Interaction.Behaviors>
<behaviors:UserControlSupportsUnloadingEventBehavior UserControlClosing="UserControlClosingHandler" />
</i:Interaction.Behaviors>
কোডবিহ্যান্ড হ্যান্ডলার:
private void UserControlClosingHandler(object sender, EventArgs e)
{
// to unloading stuff here
}
আচরণ কোড:
/// <summary>
/// This behavior raises an event when the containing window of a <see cref="UserControl"/> is closing.
/// </summary>
public class UserControlSupportsUnloadingEventBehavior : System.Windows.Interactivity.Behavior<UserControl>
{
protected override void OnAttached()
{
AssociatedObject.Loaded += UserControlLoadedHandler;
}
protected override void OnDetaching()
{
AssociatedObject.Loaded -= UserControlLoadedHandler;
var window = Window.GetWindow(AssociatedObject);
if (window != null)
window.Closing -= WindowClosingHandler;
}
/// <summary>
/// Registers to the containing windows Closing event when the UserControl is loaded.
/// </summary>
private void UserControlLoadedHandler(object sender, RoutedEventArgs e)
{
var window = Window.GetWindow(AssociatedObject);
if (window == null)
throw new Exception(
"The UserControl {0} is not contained within a Window. The UserControlSupportsUnloadingEventBehavior cannot be used."
.FormatWith(AssociatedObject.GetType().Name));
window.Closing += WindowClosingHandler;
}
/// <summary>
/// The containing window is closing, raise the UserControlClosing event.
/// </summary>
private void WindowClosingHandler(object sender, CancelEventArgs e)
{
OnUserControlClosing();
}
/// <summary>
/// This event will be raised when the containing window of the associated <see cref="UserControl"/> is closing.
/// </summary>
public event EventHandler UserControlClosing;
protected virtual void OnUserControlClosing()
{
var handler = UserControlClosing;
if (handler != null)
handler(this, EventArgs.Empty);
}
}