Как вызвать userControl (дочерний) в другом UserControl (Контейнер) - PullRequest
0 голосов
/ 10 декабря 2018

Теперь у меня есть проект WPF, который содержит другие классы и пользовательские элементы управления, теперь я застрял!как вы можете видеть ниже, файл 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 два раза (это своего рода оптимизация кода)

Это изображение может объяснить больше

Подскажите, пожалуйста, как мне это сделать, поскольку я новичок в WPF. Есть ли какой-либо код на C #, который необходимо добавить, или я могу сделать это только с помощью xaml? Любые изменения должны быть добавлены?к моему APP.xaml и спасибо

1 Ответ

0 голосов
/ 10 декабря 2018

С вашей картинкой и кодом сложно понять, каким будет этот пользовательский контроль.В принципе, вы просто создаете новый usercontrol, добавляете два из них и привязываете либо к тем же, либо к разным свойствам в зависимости от того, что они / это делают.

Теперь в Visual Studio, когда вы создаете окно или usercontrolон добавляет локальный: xmlns для вас.Если вы добавите свой новый usercontrol (назовите его SharedUC) в то же пространство имен, вы сможете использовать его в любом месте xaml, например:

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

Затем вы можете использовать два разных свойства для datacontext двух экземпляров.Или то же самое.

Это свойство может быть сложного типа.Таким образом, вы можете иметь Description или что-то еще в качестве свойства объекта, представленного как datacontext.Ваш usercontrol может затем привязать к Description, чтобы показать строку в текстовом блоке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...