这可能是一个愚蠢的问题,但我无法弄清楚如何做到这一点。我有一个名为" ReportUserControl"的UserControl。在其中我有一个名为" ReportGrid" 。我想从ReportUserControl子节目中删除ReportGrid。我试过这个:
ReportUserControl control = new ReportUserControl();
control.Children.Remove(...);
问题是UserControl没有.Children.Remove()选项。我该如何管理?
更新
我想"发送"这个网格到另一个类并在那里使用它。问题是,当我发送网格并尝试在另一个类中使用它时,我得到了这个:"指定元素已经是另一个元素的逻辑子元素。首先断开它。"所以我必须从我的UserControl中删除它,但不知道如何。
ReportUserControl XAML:
<UserControl x:Class="WPFReportTest.ReportUserControl "
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
mc:Ignorable="d"
Height="29.7cm" Width="21cm">
<Grid Name="ReportGrid">
****GridContent***
</Grid>
</UserControl>
ReportClass:
public class ReportingClass
{
Grid reportGrid;
public ReportingClass(Grid tempGrid)
{
reportGrid = tempGrid;
}
public Page SetPageContent()
{
Page page = new Page();
page.Content = reportGrid;
}
}
InstanceWindow
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
ReportUserControl userControl = new ReportUserControl();
ReportingClass report = new ReportingClass(userControl.ReportGrid);
}
}
这不是完整的代码,只是很小的一部分来了解我试图管理的内容。 Line&#34; page.Content = reportGrid;&#34;是异常发生的地方。
答案 0 :(得分:0)
UserControl
有Content
属性(msdn)。
如果要删除内容集null:
ReportUserControl control = new ReportUserControl();
control.Content = null;
示例:的
public class ReportingClass
{
ReportUserControl _reportUserControl;
Grid reportGrid;
public ReportingClass(ReportUserControl reportUserControl, Grid tempGrid)
{
_reportUserControl = reportUserControl;
reportGrid = tempGrid;
}
public Page SetPageContent()
{
Page page = new Page();
// _reportUserControl is the instance of object ReportUserControl where content is reportGrid
_reportUserControl.Content = null;
page.Content = reportGrid;
return page;
}
}
编辑:
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
ReportUserControl userControl = new ReportUserControl();
ReportingClass report = new ReportingClass(userControl, userControl.Content as Grid);
}
}
答案 1 :(得分:0)
@Stojdza,在WPF中,我们通常不会以这种方式操纵UI元素。我们操纵 data 元素并声明DataTemplate
来定义数据的外观。因此,在您的情况下,您不应该真正移动Grid
...只需移动数据并让WPF使用相同的Grid
在您想要的任何位置重新生成DataTemplate
。它看起来会一样,但它会更容易,你可以省去所有这些麻烦。
所以,如果你有兴趣以简单的方式做到这一点,首先要创建一个具有UserControl
所需的所有属性的类,让我们称之为Data
。现在在DataTemplate
中声明Application.Resources
,以便您可以在整个应用范围内使用它:
<DataTemplate DataType="{x:Type YourNamespacePrefix:Data}">
<!-- Define your Grid here -->
<DataTemplate>
现在,只要您想要显示Grid
,无论是在集合中还是单独显示,您只需要将Data
类型的属性(或它们的集合)绑定到某种形式的{ {1}}:
ContentControl
...
public Data Data { get; set; }
因此,您只需将数据复制到<ContentControl Content="{Binding Data}" />
类型的另一个属性,然后使用上面的单行重新创建Grid
,而不是尝试复制Data
。有关Grid
s。