WinUI3:拖动带有 Streached 元素的网格

Roy Li - MSFT 33,371 信誉分 Microsoft 供应商
2024-05-22T04:58:03.77+00:00

你好

我有一个带有 ReadOnly 文本框的网格,这些文本框处于拉伸对齐状态。这些只读文本框覆盖整个网格区域。

我想要一种效果,只需拖动其中一个文本框即可拖动整个网格。

我可以通过设置grid.CranDrag(TRUE); 来拖动网格

 

但我只能将它从空的网格区域拖动,但我的所有网格元素都必须处于拉伸对齐状态,这将覆盖整个网格区域而不会留下任何空的网格区域。如何通过拖动其子元素来拖动整个网格?[就像拖动表格行一样,其中网格是单行,文本框是该行中的单元格]

如果你能帮助我实现这一目标,那将是有很大帮助的。

谢谢

 

此问题由WinUI3: Drag Grid with Streached elements - Microsoft Q&A而来.

通用 Windows 平台 (UWP)
通用 Windows 平台 (UWP)
一个 Microsoft 平台,用于生成和发布适用于 Windows 桌面设备的应用。
49 个问题
0 个注释 无注释
{count} 票

1 个答案

排序依据: 非常有帮助
  1. Junjie Zhu - MSFT 18,481 信誉分 Microsoft 供应商
    2024-05-24T06:18:28.5233333+00:00

    你好

    这里有一个解决方法。

    1. 定义一个临时文本框,该文本框与要拖放的文本框相同。
    2. 在初始化时隐藏临时文本框,并在拖动时显示它。
    3. 通过使用Canvas.ZIndexProperty,实际的文本框位于网格下

    Page.xaml

    <Canvas Background="Red" Width="640" Height="640" CanDrag="True">  
        <Grid x:Name="gridContainer" CanDrag="True" Width="100" Height="80"     
            BorderThickness="1" BorderBrush="Black" Canvas.Top="30" Canvas.Left="30" Background="Transparent"   
            DragStarting="gridContainer_DragStarting"  DropCompleted="gridContainer_DropCompleted" >  
            <TextBox x:Name="temptextbox" CanDrag="True" IsReadOnly="True"/>  
        </Grid>  
        <TextBox x:Name="textbox" CanDrag="True" IsReadOnly="True" Canvas.Top="30" Canvas.Left="30"   
                Text="hello" Width="100" Height="80" >  
        </TextBox>  
    </Canvas>
    
    
    

    Page.xaml.cs

    public MainWindow()  
        {  
            this.InitializeComponent();  
            //set textbox under the gridContainer  
            gridContainer.SetValue(Canvas.ZIndexProperty, 2);  
            textbox.SetValue(Canvas.ZIndexProperty, 1);  
            temptextbox.Visibility = Visibility.Collapsed;  
        }  
        private void gridContainer_DragStarting(UIElement sender, DragStartingEventArgs args)  
        {  
            temptextbox.Width = textbox.Width;  
            temptextbox.Height = textbox.Height;  
            temptextbox.Text = textbox.Text;  
            temptextbox.Visibility = Visibility.Visible;      
        }  
        private void gridContainer_DropCompleted(UIElement sender, DropCompletedEventArgs args)  
        {  
            temptextbox.Visibility = Visibility.Collapsed;  
        }
    

    谢谢。

    0 个注释 无注释

你的答案

问题作者可以将答案标记为“接受的答案”,这有助于用户了解已解决作者问题的答案。