WPF控件、用户控制、模板混淆

WPF控件、用户控制、模板混淆,wpf,xaml,Wpf,Xaml,披露: 我是WPF的新手,大约一周前 问题: 我试图修改GridSplitter的行为,使其捕捉到感兴趣的位置,显示带有当前位置的标签(位于拆分器后面),从所述标签驱动上下文菜单,等等。我在一个简单的测试应用程序中成功地在一个GridSplitter上原型化了所有这些,使用XAML和一些代码隐藏的组合 值得注意的是,由于GridSplitter无法承载内容,我将标签放置在与拆分器相同的网格单元中,以便它们一起移动 到目前为止还不错 现在我希望复制我的工作,以便在许多位置使用新的GridSplit

披露:

我是WPF的新手,大约一周前

问题:

我试图修改GridSplitter的行为,使其捕捉到感兴趣的位置,显示带有当前位置的标签(位于拆分器后面),从所述标签驱动上下文菜单,等等。我在一个简单的测试应用程序中成功地在一个GridSplitter上原型化了所有这些,使用XAML和一些代码隐藏的组合

值得注意的是,由于GridSplitter无法承载内容,我将标签放置在与拆分器相同的网格单元中,以便它们一起移动

到目前为止还不错

现在我希望复制我的工作,以便在许多位置使用新的GridSplitter功能代替本机控件,此外,我希望有两个变体,一个是水平的,一个是垂直的。听起来像是继承…创建一个派生自GridSplitter的子类,并添加其他功能。但是我读过的所有文章都让我想知道如何去做,如果不重新开始并从头开始构建我自己的GridSplitter,这是否可能

欢迎提出意见。在此之前,我将恢复胎儿姿势


谢谢

此答案可能会帮助您解决问题:

通过订阅
GridSplitterDragCompleted
事件,您可以插入逻辑以捕捉到“有趣”的位置。

您应该

  • 创建从GridSplitter派生的新控件
  • 订阅DragCompleted事件以实现如DLeh所述的快照功能
  • 为标签、上下文菜单等添加一些新属性
  • 为新控件提供样式

  • 这回答了如何在拆分器中放置内容

    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="*" />
            <RowDefinition Height="40" />
            <RowDefinition Height="*" />
        </Grid.RowDefinitions> 
        <Button Grid.Row="0" Content="Row 0" Background="Orange"/>
        <!--<GridSplitter Grid.Row="1" VerticalAlignment="Center" HorizontalAlignment="Stretch" Height="20" Background="Purple"/>-->
        <GridSplitter Grid.Row="1" VerticalAlignment="Center" HorizontalAlignment="Stretch">
            <GridSplitter.Template>
                <ControlTemplate TargetType="{x:Type GridSplitter}">
                    <TextBlock Text="TextBlock splitter" Background="Yellow" FontWeight="Bold"/>
                </ControlTemplate>
            </GridSplitter.Template>
        </GridSplitter>
        <Button Grid.Row="2" Content="Row 0" Background="Salmon"/>
    </Grid>
    
    
    
    BTW,发布您当前的代码和XAML,如果您可以的话,只需说我希望添加一个文本框,上面写着“Hello,World!”并随GridSplitter移动,并封装该功能以供重复使用:)我的帖子声明我让这个部分正常工作,谢谢。我的问题是使新的gridsplitter可重用。您应该做的是创建一个从gridsplitter继承的新类,并在它的位置使用该控件:
    public class MyGridSplitter:gridsplitter{public MyGridSplitter(){this.GridSplitterDragCompleted+=;}
    还有一些问题。。。我这样做了,但是当我使用派生类时,它隐藏了基类的属性,比如“ResizeBehavior”和“resizedirection”。这是为什么?还有一个问题:如何使用XAML编辑派生控件?我必须用代码做所有事情吗?忽略上面两个问题……我想我明白了。将代码放在派生类中以修改行为,使用主应用程序中的模板以实现所需的外观。谢谢。这肯定回答了我的一个问题。我要带着这个跑回去报告。我会投赞成票,但我没有代表。从技术上讲,这应该是一次一个问题。在WPF世界中,您很少需要从头开始编写自己的控件。