Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在WPF中从同一窗口中的另一个调用Usercontrol?_Wpf_C# 4.0_User Controls - Fatal编程技术网

如何在WPF中从同一窗口中的另一个调用Usercontrol?

如何在WPF中从同一窗口中的另一个调用Usercontrol?,wpf,c#-4.0,user-controls,Wpf,C# 4.0,User Controls,我在项目的主窗口中有两个用户控件。在main窗口中,我调用第一个用户控件,其内容是按钮,并将此第一个控件放入网格中。当我单击主窗口中的FirstUserControl中的按钮时,如何调用第二个UserControl? 第一个用户控件: <UserControl x:Class="BenashManage.UserControl.ButtonUserControl" xmlns="http://schemas.microsoft.com/winfx/2006/xam

我在项目的主窗口中有两个用户控件。在
main窗口
中,我调用第一个用户控件,其内容是
按钮
,并将此第一个控件放入网格中。当我单击主窗口中的
FirstUserControl
中的按钮时,如何调用第二个UserControl?
第一个用户控件:

<UserControl x:Class="BenashManage.UserControl.ButtonUserControl"
             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" 
             Height="auto" Width="auto" RenderTransformOrigin="0,0">
    <Grid>
        <Border x:Name="BorderAddEdit"  BorderBrush="{DynamicResource BorderBrush}" BorderThickness="5,5,5,5" CornerRadius="9,9,9,9" Background="{x:Null}">
            <Grid Margin="0.2,0.2,5.4,4.2">
                <Grid.RowDefinitions>
                    <RowDefinition Height="3*"/>
                </Grid.RowDefinitions>
                <Button Content="one"  TextBlock.Foreground="White"  Grid.Row="1"  Margin="9,9,9,9"                  Height="28" TextBlock.FontSize="15" Name="btn_MartyMang" Click="click_Marty"/>
            </Grid>
        </Border>
    </Grid>
</UserControl>
<UserControl x:Class="BenashManage.UserControl.InjuredUserControl"
             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" 
             Height="auto" Width="auto"
             mc:Ignorable="d" RenderTransformOrigin="0,0" FontFamily="Arial" FontSize="14"   TextBlock.Foreground="White">

    <Grid VerticalAlignment="Top" Height="auto" Width="360"  HorizontalAlignment="Right">
        <Border x:Name="BorderAddEdit"  Margin="6,2,6,6"  BorderThickness="5,5,5,5" CornerRadius="9,9,9,9" Background="{x:Null}">
            <Grid VerticalAlignment="Center" >
                <Grid.RowDefinitions>
                    <RowDefinition Height="Auto"/>
                    <RowDefinition Height="Auto" MinHeight="20.8"/>
                </Grid.ColumnDefinitions>
                <TextBlock TextWrapping="Wrap" Text=":jjj" Grid.Column="1" Grid.Row="0" VerticalAlignment="Center" HorizontalAlignment="Right" Margin="0,4,-0.4,3"/>
                <TextBox  Grid.Row="6" TextAlignment="Right" VerticalAlignment="Center" Margin="3,2.8,2.2,2.2" />

            </Grid>
        </Border>

    </Grid>

</UserControl>
<Window x:Class="BenashManage.MartyrManage"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:controls="clr-namespace:BenashManage.UserControl"
        Title="MartyrManage" Height="550" Width="550"  Style="{DynamicResource ModalWindowStyle}" Loaded="Window_Loaded_1">
    <Window.CommandBindings>
        <CommandBinding Command="Close"
        Executed="CloseCommand_Executed"/>
    </Window.CommandBindings>
    <Grid >
        <Grid Margin="179,10,10.4,10" HorizontalAlignment="Center" VerticalAlignment="Center" 
*******
Height="456" Width="357" Name="MoveToUserControl" ></Grid>
        <Grid Margin="10,71,372.4,67" HorizontalAlignment="Center" VerticalAlignment="Center" Height="338" Width="auto" Name="ButtonManage" >
            <controls:FirstUserControl Margin="0,0,0,92">

            </controls:FirstUserControl>
        </Grid>
    </Grid>
</Window>

第二个用户控件:

<UserControl x:Class="BenashManage.UserControl.ButtonUserControl"
             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" 
             Height="auto" Width="auto" RenderTransformOrigin="0,0">
    <Grid>
        <Border x:Name="BorderAddEdit"  BorderBrush="{DynamicResource BorderBrush}" BorderThickness="5,5,5,5" CornerRadius="9,9,9,9" Background="{x:Null}">
            <Grid Margin="0.2,0.2,5.4,4.2">
                <Grid.RowDefinitions>
                    <RowDefinition Height="3*"/>
                </Grid.RowDefinitions>
                <Button Content="one"  TextBlock.Foreground="White"  Grid.Row="1"  Margin="9,9,9,9"                  Height="28" TextBlock.FontSize="15" Name="btn_MartyMang" Click="click_Marty"/>
            </Grid>
        </Border>
    </Grid>
</UserControl>
<UserControl x:Class="BenashManage.UserControl.InjuredUserControl"
             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" 
             Height="auto" Width="auto"
             mc:Ignorable="d" RenderTransformOrigin="0,0" FontFamily="Arial" FontSize="14"   TextBlock.Foreground="White">

    <Grid VerticalAlignment="Top" Height="auto" Width="360"  HorizontalAlignment="Right">
        <Border x:Name="BorderAddEdit"  Margin="6,2,6,6"  BorderThickness="5,5,5,5" CornerRadius="9,9,9,9" Background="{x:Null}">
            <Grid VerticalAlignment="Center" >
                <Grid.RowDefinitions>
                    <RowDefinition Height="Auto"/>
                    <RowDefinition Height="Auto" MinHeight="20.8"/>
                </Grid.ColumnDefinitions>
                <TextBlock TextWrapping="Wrap" Text=":jjj" Grid.Column="1" Grid.Row="0" VerticalAlignment="Center" HorizontalAlignment="Right" Margin="0,4,-0.4,3"/>
                <TextBox  Grid.Row="6" TextAlignment="Right" VerticalAlignment="Center" Margin="3,2.8,2.2,2.2" />

            </Grid>
        </Border>

    </Grid>

</UserControl>
<Window x:Class="BenashManage.MartyrManage"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:controls="clr-namespace:BenashManage.UserControl"
        Title="MartyrManage" Height="550" Width="550"  Style="{DynamicResource ModalWindowStyle}" Loaded="Window_Loaded_1">
    <Window.CommandBindings>
        <CommandBinding Command="Close"
        Executed="CloseCommand_Executed"/>
    </Window.CommandBindings>
    <Grid >
        <Grid Margin="179,10,10.4,10" HorizontalAlignment="Center" VerticalAlignment="Center" 
*******
Height="456" Width="357" Name="MoveToUserControl" ></Grid>
        <Grid Margin="10,71,372.4,67" HorizontalAlignment="Center" VerticalAlignment="Center" Height="338" Width="auto" Name="ButtonManage" >
            <controls:FirstUserControl Margin="0,0,0,92">

            </controls:FirstUserControl>
        </Grid>
    </Grid>
</Window>

主窗口:

<UserControl x:Class="BenashManage.UserControl.ButtonUserControl"
             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" 
             Height="auto" Width="auto" RenderTransformOrigin="0,0">
    <Grid>
        <Border x:Name="BorderAddEdit"  BorderBrush="{DynamicResource BorderBrush}" BorderThickness="5,5,5,5" CornerRadius="9,9,9,9" Background="{x:Null}">
            <Grid Margin="0.2,0.2,5.4,4.2">
                <Grid.RowDefinitions>
                    <RowDefinition Height="3*"/>
                </Grid.RowDefinitions>
                <Button Content="one"  TextBlock.Foreground="White"  Grid.Row="1"  Margin="9,9,9,9"                  Height="28" TextBlock.FontSize="15" Name="btn_MartyMang" Click="click_Marty"/>
            </Grid>
        </Border>
    </Grid>
</UserControl>
<UserControl x:Class="BenashManage.UserControl.InjuredUserControl"
             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" 
             Height="auto" Width="auto"
             mc:Ignorable="d" RenderTransformOrigin="0,0" FontFamily="Arial" FontSize="14"   TextBlock.Foreground="White">

    <Grid VerticalAlignment="Top" Height="auto" Width="360"  HorizontalAlignment="Right">
        <Border x:Name="BorderAddEdit"  Margin="6,2,6,6"  BorderThickness="5,5,5,5" CornerRadius="9,9,9,9" Background="{x:Null}">
            <Grid VerticalAlignment="Center" >
                <Grid.RowDefinitions>
                    <RowDefinition Height="Auto"/>
                    <RowDefinition Height="Auto" MinHeight="20.8"/>
                </Grid.ColumnDefinitions>
                <TextBlock TextWrapping="Wrap" Text=":jjj" Grid.Column="1" Grid.Row="0" VerticalAlignment="Center" HorizontalAlignment="Right" Margin="0,4,-0.4,3"/>
                <TextBox  Grid.Row="6" TextAlignment="Right" VerticalAlignment="Center" Margin="3,2.8,2.2,2.2" />

            </Grid>
        </Border>

    </Grid>

</UserControl>
<Window x:Class="BenashManage.MartyrManage"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:controls="clr-namespace:BenashManage.UserControl"
        Title="MartyrManage" Height="550" Width="550"  Style="{DynamicResource ModalWindowStyle}" Loaded="Window_Loaded_1">
    <Window.CommandBindings>
        <CommandBinding Command="Close"
        Executed="CloseCommand_Executed"/>
    </Window.CommandBindings>
    <Grid >
        <Grid Margin="179,10,10.4,10" HorizontalAlignment="Center" VerticalAlignment="Center" 
*******
Height="456" Width="357" Name="MoveToUserControl" ></Grid>
        <Grid Margin="10,71,372.4,67" HorizontalAlignment="Center" VerticalAlignment="Center" Height="338" Width="auto" Name="ButtonManage" >
            <controls:FirstUserControl Margin="0,0,0,92">

            </controls:FirstUserControl>
        </Grid>
    </Grid>
</Window>

有几种方法可以做到这一点:

1) 获取UserControl的父级,然后获取其子级

(((control1).Parent as Panel).Children[1] as UserControl)

2) 在MainWindow处理的一个UserControl中引发一个事件,以调用另一个UserControl中的函数。

您可以创建第二个UserControl的实例,并将其添加为网格的子级或您使用的任何容器。我希望两个UserControl都在MainWindow中,但第一个UserControl在单击按钮时调用secund UserControl。当我显示主窗口时,我不显示SecundUserControls。您可以在第二个用户控件上实现一个附加属性,该属性可以绑定到第一个控件上的附加属性。您可以告诉我,如何实现它!!!在我的代码中,当通过以下代码单击按钮时,我从第一个UserControl调用第二个UserControl:firstusercontroladd=newfirstcontrol()//grid.Children.Clear()//grid.Children.Add(Add);但是我无法在MainWindow中从第一个用户控件访问网格视图。您不应该清除网格。相反,将第一个UserControl的可见性设置为“折叠”。