কখনও কখনও, আমাদের অ্যাক্সেস নেই Window
, উদাহরণস্বরূপ যদি আমরা ব্যবহার করি তবে DevExpress
যা পাওয়া যায় তা হ'ল একটি UIElement
।
পদক্ষেপ 1: সংযুক্ত সম্পত্তি যুক্ত করুন
সমাধানটি হ'ল:
MouseMove
ঘটনাগুলিতে আবদ্ধ ;
- আমরা প্রথম পিতামাতাকে না পাওয়া পর্যন্ত ভিজ্যুয়াল ট্রি অনুসন্ধান করুন
Window
;
.DragMove()
আমাদের সদ্য আবিষ্কৃতকে কল করুন Window
।
কোড:
using System.Windows;
using System.Windows.Input;
using System.Windows.Media;
namespace DXApplication1.AttachedProperty
{
public class EnableDragHelper
{
public static readonly DependencyProperty EnableDragProperty = DependencyProperty.RegisterAttached(
"EnableDrag",
typeof (bool),
typeof (EnableDragHelper),
new PropertyMetadata(default(bool), OnLoaded));
private static void OnLoaded(DependencyObject dependencyObject, DependencyPropertyChangedEventArgs dependencyPropertyChangedEventArgs)
{
var uiElement = dependencyObject as UIElement;
if (uiElement == null || (dependencyPropertyChangedEventArgs.NewValue is bool) == false)
{
return;
}
if ((bool)dependencyPropertyChangedEventArgs.NewValue == true)
{
uiElement.MouseMove += UIElementOnMouseMove;
}
else
{
uiElement.MouseMove -= UIElementOnMouseMove;
}
}
private static void UIElementOnMouseMove(object sender, MouseEventArgs mouseEventArgs)
{
var uiElement = sender as UIElement;
if (uiElement != null)
{
if (mouseEventArgs.LeftButton == MouseButtonState.Pressed)
{
DependencyObject parent = uiElement;
int avoidInfiniteLoop = 0;
// Search up the visual tree to find the first parent window.
while ((parent is Window) == false)
{
parent = VisualTreeHelper.GetParent(parent);
avoidInfiniteLoop++;
if (avoidInfiniteLoop == 1000)
{
// Something is wrong - we could not find the parent window.
return;
}
}
var window = parent as Window;
window.DragMove();
}
}
}
public static void SetEnableDrag(DependencyObject element, bool value)
{
element.SetValue(EnableDragProperty, value);
}
public static bool GetEnableDrag(DependencyObject element)
{
return (bool)element.GetValue(EnableDragProperty);
}
}
}
পদক্ষেপ 2: উইন্ডোটি টেনে আনতে যেকোন উপাদানকে সংযুক্ত সম্পত্তি যুক্ত করুন
আমরা যদি এই সংযুক্ত সম্পত্তিটিকে যুক্ত করি তবে ব্যবহারকারী কোনও নির্দিষ্ট উপাদানটিতে ক্লিক করে পুরো উইন্ডোটি টেনে আনতে পারে:
<Border local:EnableDragHelper.EnableDrag="True">
<TextBlock Text="Click me to drag this entire window"/>
</Border>
পরিশিষ্ট এ: Advancedচ্ছিক উন্নত উদাহরণ
থেকে এই উদাহরণে DevExpress , আমরা আমাদের নিজস্ব ধূসর আয়তক্ষেত্র সঙ্গে একটি ডকিং উইন্ডোর শিরোনাম দণ্ড প্রতিস্থাপন, তারপর নিশ্চিত করুন যে, তাহলে ব্যবহারকারী ক্লিক এবং মাদকের ধূসর rectagle বললেন, জানালা স্বাভাবিকভাবে টেনে হবে:
<dx:DXWindow x:Class="DXApplication1.MainWindow" Title="MainWindow" Height="464" Width="765"
xmlns:dx="http://schemas.devexpress.com/winfx/2008/xaml/core"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:dxdo="http://schemas.devexpress.com/winfx/2008/xaml/docking"
xmlns:local="clr-namespace:DXApplication1.AttachedProperty"
xmlns:dxdove="http://schemas.devexpress.com/winfx/2008/xaml/docking/visualelements"
xmlns:themeKeys="http://schemas.devexpress.com/winfx/2008/xaml/docking/themekeys">
<dxdo:DockLayoutManager FloatingMode="Desktop">
<dxdo:DockLayoutManager.FloatGroups>
<dxdo:FloatGroup FloatLocation="0, 0" FloatSize="179,204" MaxHeight="300" MaxWidth="400"
local:TopmostFloatingGroupHelper.IsTopmostFloatingGroup="True"
>
<dxdo:LayoutPanel ShowBorder="True" ShowMaximizeButton="False" ShowCaption="False" ShowCaptionImage="True"
ShowControlBox="True" ShowExpandButton="True" ShowInDocumentSelector="True" Caption="TradePad General"
AllowDock="False" AllowHide="False" AllowDrag="True" AllowClose="False"
>
<Grid Margin="0">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<Border Grid.Row="0" MinHeight="15" Background="#FF515151" Margin="0 0 0 0"
local:EnableDragHelper.EnableDrag="True">
<TextBlock Margin="4" Text="General" FontWeight="Bold"/>
</Border>
<TextBlock Margin="5" Grid.Row="1" Text="Hello, world!" />
</Grid>
</dxdo:LayoutPanel>
</dxdo:FloatGroup>
</dxdo:DockLayoutManager.FloatGroups>
</dxdo:DockLayoutManager>
</dx:DXWindow>
দাবি পরিত্যাগী: আমি না সঙ্গে সম্বন্ধযুক্ত DevExpress । এই কৌশলটি স্ট্যান্ডার্ড ডাব্লুপিএফ বা টেলিরিক (অন্য সূক্ষ্ম ডাব্লুপিএফ গ্রন্থাগার সরবরাহকারী) সহ যে কোনও ব্যবহারকারীর উপাদানগুলির সাথে কাজ করবে ।