首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WPF GridSplitter可视性

WPF GridSplitter可视性
EN

Stack Overflow用户
提问于 2009-04-06 06:26:39
回答 6查看 3.3K关注 0票数 0

我有一个关于GridSplitter可视性的问题。

在这种情况下,无论我托管一个Winform DataGridView。拖动时,GridSplitter在其他控件上正确可见。但不是在这个网格上。实际上,无论我托管的是什么,而不是Datagridview,它都会成为最顶层的控件,这使得GridSplitter隐藏在它的后面。

代码语言:javascript
复制
<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Name="rowForButton"/>
        <RowDefinition Name="rowForGridSplitter" Height="Auto" MinHeight="81" />
    </Grid.RowDefinitions>
    <Button Grid.Row="0" Height="50" Width="110" Content="Button in First Row"/>
    <my:WindowsFormsHost Panel.ZIndex="0" Grid.Row="1"  Margin="30,11,138,0" x:Name="winHost" Height="58" VerticalAlignment="Top" OpacityMask="Transparent">            
        <win:DataGridView x:Name="dataGridView"></win:DataGridView>
    </my:WindowsFormsHost>        
    <GridSplitter  BorderThickness="1" Panel.ZIndex="1" Grid.Row="1" HorizontalAlignment="Stretch" Height="5" ShowsPreview="True" VerticalAlignment="Top">
    </GridSplitter>
</Grid>
EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2009-04-06 12:24:38

Windows窗体控件始终独立于WPF控件呈现,因此将始终显示在WPF应用程序上。

有关更多信息,请参阅Hosting a Microsoft Win32 Window in WPF (副标题输出行为的显著差异)。

票数 0
EN

Stack Overflow用户

发布于 2009-04-06 06:44:26

通常,您应该将一个GridSplitter放入它自己的网格单元格中,或者确保没有任何控件可以与它重叠。但我不知道这是否适用于这里的你。另请参见here

票数 1
EN

Stack Overflow用户

发布于 2012-05-18 15:42:34

我也遇到了这个问题,下面是我的解决方案:

代码语言:javascript
复制
var splitter = new GridSplitter()
        {
            HorizontalAlignment = HorizontalAlignment.Stretch,
            VerticalAlignment = VerticalAlignment.Stretch,
            FocusVisualStyle = null,
            ShowsPreview = true,
            Background = new SolidColorBrush(new Color() { R = 1, G = 1, B = 1, A = 1 }),
        };

// non-style / essential window which will display over your WinForm control
var PopupWindowForSplitter = new PopupWindow()
        {
            Background = new SolidColorBrush(new Color() { R = 1, G = 1, B = 1, A = 1 }),
            Visibility = Visibility.Collapsed
        };
PopupWindowForSplitter.Show();
...

Point _ptForSplitterDrag = new Point(0,0);

splitter.DragStarted += (o, e) =>
        {
            var pt = splitter.PointToScreen(new Point());
            _ptForSplitterDrag = splitter.PointToScreen(Mouse.GetPosition(splitter));
            PopupWindowForSplitter.Left = pt.X;
            PopupWindowForSplitter.Top = pt.Y;
            PopupWindowForSplitter.Height = splitter.ActualHeight;
            PopupWindowForSplitter.Width = splitter.ActualWidth;
            PopupWindowForSplitter.Activate();
            PopupWindowForSplitter.Visibility = Visibility.Visible;
        };
        splitter.DragDelta += (o, e) =>
        {
            var pt = splitter.PointToScreen(Mouse.GetPosition(splitter)) - _ptForSplitterDrag
                + splitter.PointToScreen(new Point());
            if (splitter.ResizeDirection == GridResizeDirection.Rows)
            {
                PopupWindowForSplitter.Top = pt.Y;
            }
            else
            {
                PopupWindowForSplitter.Left = pt.X;
            }
        };
        splitter.DragCompleted += (o, e) =>
        {
            var initializeData = typeof(GridSplitter).GetMethod("InitializeData", BindingFlags.NonPublic | BindingFlags.Instance);
            var moveSplitter = typeof(GridSplitter).GetMethod("MoveSplitter", BindingFlags.NonPublic | BindingFlags.Instance);
            if (moveSplitter != null && initializeData != null)
            {
                initializeData.Invoke(splitter, new object[] { true });

                var pt = splitter.PointToScreen(Mouse.GetPosition(splitter)) - _ptForSplitterDrag;
                if (splitter.ResizeDirection == GridResizeDirection.Rows)
                {
                    moveSplitter.Invoke(splitter, new object[] { 0, pt.Y });
                }
                else
                {
                    moveSplitter.Invoke(splitter, new object[] { pt.X, 0 });
                }
            }
            PopupWindowForSplitter.Visibility = Visibility.Collapsed;
        };

也许我的描述中有一些问题,因为我的英语很差,但我认为代码足以解释它。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/720375

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档