我有一個畫布,可以在其中創建可以移動的標簽。我希望能夠“阻止”邊界處的移動,甚至是給定的值:例如,我希望能夠在右邊的 X = 1028 處不進一步。或者更好,如果我將標簽放在此最大值之上,它應該回傳到其初始位置。
這可能嗎?如何?
我的代碼:
public partial class WPFPlanningJournalier : Window
{
protected bool isDragging;
private Point clickPosition;
private TranslateTransform originTT;
private bool OuvrirLignePrise;
private bool positionDepartAgentPresent;
private bool positionTropADroite;
private bool startPosition;
public WPFPlanningJournalier()
{
InitializeComponent();
}
private void Canvas_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
((PlanningJournalierViewModel)(this.DataContext)).AgentSelected(sender.ToString());
var draggableControl = sender as Label;
originTT = draggableControl.RenderTransform as TranslateTransform ?? new TranslateTransform();
isDragging = true;
clickPosition = e.GetPosition(this);
draggableControl.CaptureMouse();
}
private void Canvas_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
{
isDragging = false;
var draggable = sender as Label;
draggable.ReleaseMouseCapture();
Cursor = Cursors.Arrow;
}
private void Canvas_MouseMove(object sender, MouseEventArgs e)
{
var draggableControl = sender as Label;
if (isDragging && draggableControl != null)
{
Cursor = Cursors.ScrollAll;
Point currentPosition = e.GetPosition(this);
var transform = draggableControl.RenderTransform as TranslateTransform ?? new TranslateTransform();
transform.X = originTT.X (currentPosition.X - clickPosition.X);
//transform.Y = originTT.Y (currentPosition.Y - clickPosition.Y);
X.Text = $"X = { currentPosition.X}";
Y.Text = $"Y = { currentPosition.Y}";
draggableControl.RenderTransform = new TranslateTransform(transform.X, transform.Y);
if (currentPosition.X > 1028) //this doesnt work
{
transform.X = clickPosition.X;
}
}
}
}
WPF部分:
<ScrollViewer
Grid.Row="1"
Grid.Column="1"
Margin="0,25,0,0"
Panel.ZIndex="12"
TabIndex="100">
<ItemsControl
x:Name="ICAgentAffiché"
MinHeight="{Binding HauteurPlanning}"
HorizontalAlignment="Stretch"
ItemsSource="{Binding Path=AffichageAgent}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<Canvas Background="Transparent" />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemContainerStyle>
<Style TargetType="ContentPresenter">
<Setter Property="Canvas.Left" Value="{Binding Left}" />
<Setter Property="Canvas.Top" Value="{Binding Top}" />
</Style>
</ItemsControl.ItemContainerStyle>
<ItemsControl.ItemTemplate>
<DataTemplate>
<Label
x:Name="LbAgentAffiche"
Width="{Binding Width}"
Height="17"
Padding="1"
HorizontalContentAlignment="Center"
VerticalContentAlignment="Top"
Panel.ZIndex="22"
Background="{Binding Color, Converter={StaticResource ServiceSectionColorConverter}, Mode=OneWay}"
BorderBrush="Black"
BorderThickness="0.5"
Content="{Binding Path=NomPrenom}"
FontSize="10"
MouseLeftButtonDown="Canvas_MouseLeftButtonDown"
MouseLeftButtonUp="Canvas_MouseLeftButtonUp"
MouseMove="Canvas_MouseMove" />
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</ScrollViewer>
當我在邊框上移動標簽時實際發生了什么:

uj5u.com熱心網友回復:
這是因為當你這樣做時:
if (currentPosition.X > 1028) //this doesnt work
{
transform.X = clickPosition.X;
}
您使用transform,這是與您使用的轉換不同的實體。您在之前實體化了一個新的 RenderTransform:
draggableControl.RenderTransform = new TranslateTransform(transform.X, transform.Y);
這應該有效:
if (currentPosition.X > 1028)
{
((TranslateTransform)draggableControl.RenderTransform).X = clickPosition.X;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/415525.html
標籤:
