![](/img/trans.png)
[英]In WPF how do you access an object defined in Window.xaml from a nested user control?
[英]How do you overlay a control over a grid that it is not in (xaml/wpf)
我有一个网格用作文本框之间的拖放区域,但是,将其放在它们之间会导致文本框移位。 我如何才能使拖放网格位于文本框后面,而不是它们之间?
第一个网格是拖放区域,下面是文本框的代码:
<Grid Grid.Column="0" Height="Auto" Width="20" AllowDrop="True" Background="White"
DragEnter="Grid_DragEnter" DragLeave="Grid_DragLeave" Drop="Grid_Drop" Tag="{Binding}"/>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<TextBlock HorizontalAlignment="Left" Margin="5,2"
Text="some text"
VerticalAlignment="Center" FontSize="5" />
</Grid>
我的意思的图片 ,其中黑框是文本框,红色包围的所有内容是可以拖放对象的网格区域。
这对我有用。 后面的代码是一个温和的命令,尤其是通过名称引用droptarget。 将其转换为绑定到droptarget元素的附加属性将很容易,这将方便在模板等中使用。无论如何,如果没有代码隐藏,就无法进行拖放,因此就可以了。 有时,生活会使您陷入困境。 用它来做,嗯,柠檬。
许多XAML只是在忙乱工作,以使元素彼此重叠,就像您所做的那样。 Grid.Column
/ Grid.ColumnSpan
东西对于您要考虑的重叠布局很重要。
请注意,TextBoxes使用PreviewDragOver
事件,而不使用DragOver
。 DragOver
没有被提出。 不知道这是错误还是我的理解错误,但是很多人似乎在使DragOver
与WPF TextBox
一起使用时遇到麻烦。
XAML:
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="1*" />
<ColumnDefinition Width="1*" />
</Grid.ColumnDefinitions>
<Grid
Grid.Column="0"
Grid.ColumnSpan="2"
Margin="80,0,80,0"
Height="80"
VerticalAlignment="Center"
HorizontalAlignment="Stretch"
Drop="TextBox_Drop"
DragOver="TextBox_DragOver"
Background="DeepSkyBlue"
x:Name="DropTargetGrid"
AllowDrop="True"
></Grid>
<TextBox
Grid.Column="0"
Margin="40,40,10,40"
Drop="TextBox_Drop"
PreviewDragOver="TextBox_DragOver"
AllowDrop="True"
VerticalAlignment="Center"
/>
<TextBox
Grid.Column="1"
Margin="10,40,40,40"
Drop="TextBox_Drop"
PreviewDragOver="TextBox_DragOver"
AllowDrop="True"
VerticalAlignment="Center"
/>
</Grid>
后面的代码:
private void TextBox_Drop(object sender, DragEventArgs e)
{
// Do whatever
}
private void TextBox_DragOver(object sender, DragEventArgs e)
{
var ptTargetClient = e.GetPosition(DropTargetGrid);
if (ptTargetClient.X >= 0 && ptTargetClient.X <= DropTargetGrid.ActualWidth
&& ptTargetClient.Y >= 0 && ptTargetClient.Y <= DropTargetGrid.ActualHeight)
{
e.Handled = true;
e.Effects = DragDropEffects.Move;
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.