luv*_*nie 1 c# controls canvas uwp uwp-xaml
我是UWP canvas元素的新手.从我找到实现它的方式的那一刻起.我找到了这个链接,这个链接实现了我想要的控件.但是我遵循在其中定义的类.我无法继承显示它是密封类型的Thumb控件.有没有人知道如何找到实现这个的方法?
public class MoveThumb : Thumb
{
public MoveThumb(Control dataContext, DragDeltaEventHandler dragDelta)
{
DataContext = dataContext;
DragDelta = dragDelta;
}
public Control DataContext { get; private set; }
public DragDeltaEventHandler DragDelta { get; }
private void MoveThumb_DragDelta(object sender, DragDeltaEventArgs e)
{
Control designerItem = this.DataContext as Control;
if (designerItem != null)
{
double left = Canvas.GetLeft(designerItem);
double top = Canvas.GetTop(designerItem);
Canvas.SetLeft(designerItem, left + e.HorizontalChange);
Canvas.SetTop(designerItem, top + e.VerticalChange);
}
}
}
Run Code Online (Sandbox Code Playgroud)
我有一些样品.认为你会明白这个想法.这是UserControlXAML:
Width="256"
Height="128">
<Grid x:Name="ContainerGrid" Background="Transparent"
ManipulationMode="TranslateX,TranslateY"
ManipulationStarted="Manipulator_OnManipulationStarted"
ManipulationDelta="Manipulator_OnManipulationDelta">
<Viewbox IsHitTestVisible="False">
<TextBlock Text="Text" Foreground="Lime"/>
</Viewbox>
<Rectangle x:Name="ResizeRectangle" IsHitTestVisible="False"
Width="16" Height="16" Fill="Orange"
VerticalAlignment="Bottom" HorizontalAlignment="Right"/>
<Rectangle Stretch="Fill" Stroke="DeepPink" StrokeThickness="2"
IsHitTestVisible="False"/>
</Grid>
Run Code Online (Sandbox Code Playgroud)
还有一个代码:
private bool _isResizing;
public Manipulator()
{
InitializeComponent();
}
private void Manipulator_OnManipulationStarted(object sender, ManipulationStartedRoutedEventArgs e)
{
if (e.Position.X > Width - ResizeRectangle.Width && e.Position.Y > Height - ResizeRectangle.Height) _isResizing = true;
else _isResizing = false;
}
private void Manipulator_OnManipulationDelta(object sender, ManipulationDeltaRoutedEventArgs e)
{
if (_isResizing)
{
Width += e.Delta.Translation.X;
Height += e.Delta.Translation.Y;
}
else
{
Canvas.SetLeft(this, Canvas.GetLeft(this) + e.Delta.Translation.X);
Canvas.SetTop(this, Canvas.GetTop(this) + e.Delta.Translation.Y);
}
}
Run Code Online (Sandbox Code Playgroud)
创建完成后,UserControl只需将其放入Canvas:
<Canvas>
<local:Manipulator/>
</Canvas>
Run Code Online (Sandbox Code Playgroud)
我称之为Manipuilator.
这是它的样子:
| 归档时间: |
|
| 查看次数: |
484 次 |
| 最近记录: |