如何在另一个UserControl(容器)中调用userControl(子级)

时间:2018-12-10 15:07:59

标签: c# wpf

现在我有一个WPF项目,其中包含其他类和UserControls,现在我被卡住了! 如您所见,我拥有的xaml文件包含2个块,它们具有不同的数据(输入和输出)类似

 <!--Block 1-->
    <GroupBox Grid.Column="0" Grid.Row="0" Header="Inputs">
        <StackPanel  Orientation="Vertical">
                    <DataGrid x:Name ="GridI"  Style="{x:Null}"
                    ItemsSource= "{Binding input_List}"

                  AutoGenerateColumns="False" CellStyle="{StaticResource Body_Content_DataGrid_Centering}"
                  Margin="5,0" IsReadOnly="True" SelectionMode="Single" RowHeight="50" Height="Auto">


                        <DataGrid.Columns>

                            <DataGridTextColumn Width="40*" Binding="{Binding label}">
                                <DataGridTextColumn.HeaderTemplate>
                                    <DataTemplate>
                                        <TextBlock  Text="Input"></TextBlock>
                                    </DataTemplate>
                                </DataGridTextColumn.HeaderTemplate>
                            </DataGridTextColumn>

                            <DataGridTextColumn  Width="40*" Binding="{Binding type}">
                                <DataGridTextColumn.HeaderTemplate>
                                    <DataTemplate>
                                        <TextBlock  Text = "Type"></TextBlock>
                                    </DataTemplate>
                                </DataGridTextColumn.HeaderTemplate>
                            </DataGridTextColumn>


                            <DataGridTemplateColumn Width="20*">
                                <DataGridTemplateColumn.Header>
                                    <TextBlock Text="value" />
                                </DataGridTemplateColumn.Header>
                                <DataGridTemplateColumn.CellTemplate>
                                    <DataTemplate>
                                        <StackPanel>
          //datas
                                        </StackPanel>

                                    </DataTemplate>
                                </DataGridTemplateColumn.CellTemplate>
                            </DataGridTemplateColumn>

                        </DataGrid.Columns>
                    </DataGrid>

        </StackPanel>

    </GroupBox>

    <!--Block 2 : outputs-->
    <GroupBox Grid.Column="1" Grid.Row="0" Header="Outputs">
        <StackPanel  Orientation="Vertical" >

                    <DataGrid x:Name ="GridO"  Style="{x:Null}"
                    ItemsSource= "{Binding output_List}"

                  AutoGenerateColumns="False" CellStyle="{StaticResource Body_Content_DataGrid_Centering}"
                  Margin="5,0" IsReadOnly="True" SelectionMode="Single" RowHeight="50" Height="Auto">


                        <DataGrid.Columns>

                            <DataGridTextColumn Width="40*" Binding="{Binding label}">
                                <DataGridTextColumn.HeaderTemplate>
                                    <DataTemplate>
                                        <TextBlock  Text="Input"></TextBlock>
                                    </DataTemplate>
                                </DataGridTextColumn.HeaderTemplate>
                            </DataGridTextColumn>

                            <DataGridTextColumn  Width="40*" Binding="{Binding type}">
                                <DataGridTextColumn.HeaderTemplate>
                                    <DataTemplate>
                                        <TextBlock  Text = "Type"></TextBlock>
                                    </DataTemplate>
                                </DataGridTextColumn.HeaderTemplate>
                            </DataGridTextColumn>


                            <DataGridTemplateColumn Width="20*" >
                                <DataGridTemplateColumn.Header>
                                    <TextBlock Text="value" />
                                </DataGridTemplateColumn.Header>
                                <DataGridTemplateColumn.CellTemplate>
                                    <DataTemplate>
                                        <StackPanel>

                                              //Datas

                                        </StackPanel>

                                    </DataTemplate>
                                </DataGridTemplateColumn.CellTemplate>
                            </DataGridTemplateColumn>

                        </DataGrid.Columns>
                    </DataGrid>
    </GroupBox>

我要做的是在我的项目中创建另一个UserControl(子代),在其中我将只编写一个块的代码,而该UserControl(子代)将在父UserControl中被调用两次(这是一种代码优化)

This Image can explain more

由于我是WPF的新手,请您能帮助我该怎么做 是否有任何必须添加的C#代码,否则我只能使用xaml执行此操作 是否必须将任何修改添加到我的APP.xaml中 谢谢你

1 个答案:

答案 0 :(得分:0)

从图片中找出并编码此用户控件将是棘手的。原则上,您只需创建一个新的用户控件,然后添加其中两个,然后根据它们的用途将其绑定到相同或不同的属性。

现在在Visual Studio中,当您创建窗口或用户控件时,它会为您添加一个local:xmlns。 如果在同一个名称空间中添加新的usercontrol(称为SharedUC),则可以在xaml中的任何位置使用它,例如:

  <local:SharedUC DataContext="{Binding SomeProperty}"

然后可以对两个实例的数据上下文使用两个不同的属性。还是一样。

该属性可以是复杂类型。 这样,您就可以将Description或任何内容作为对象的属性呈现为datacontext。然后,您的usercontrol可以绑定到Description以在文本块中显示字符串。