C# 如何在单击位于一个主窗口(C/Xaml)中的两个UserControl时从另一个UserControl显示/调用UserControl

C# 如何在单击位于一个主窗口(C/Xaml)中的两个UserControl时从另一个UserControl显示/调用UserControl,c#,wpf,xaml,user-controls,C#,Wpf,Xaml,User Controls,我现在很困,我要解释我的问题和我想要什么。 在我的解决方案中,我有一个主窗口,在该主窗口中,我调用位于userControlLibrary中的第一个userControl。这是带按钮的菜单。我想当我点击第一个userControl的第一个按钮时,我想把第二个userControl的可见性也放在userControlLibrary中。但我尝试了很多东西,但没有一个奏效 第一个用户控件是UC_MenuSlider,第二个用户控件是UC_Start_Study,单击第一个用户控件上的按钮后必须可见。启

我现在很困,我要解释我的问题和我想要什么。 在我的解决方案中,我有一个主窗口,在该主窗口中,我调用位于userControlLibrary中的第一个userControl。这是带按钮的菜单。我想当我点击第一个userControl的第一个按钮时,我想把第二个userControl的可见性也放在userControlLibrary中。但我尝试了很多东西,但没有一个奏效

第一个用户控件是UC_MenuSlider,第二个用户控件是UC_Start_Study,单击第一个用户控件上的按钮后必须可见。启动时,UC\u开始\u研究被隐藏

这是我的主窗口代码的一部分:

不管用。然后我使用“RouteEvent”,但我真的不知道它是谁用的


我希望我的问题足够清楚,提前感谢您的anwsers

问题在于您正在创建一个新的UC_StartTrudy并将其可见性设置为可见。您真正需要的是在XAML:UC\U Start\U研究中设置一个的可见性

您还可以使用XAML数据绑定UC_StartTrudy的可见性属性,并在代码中设置其值:

XAML:


我不明白你为什么要使用UC_StartStudy的新实例,因为你已经在主窗口中添加了这个实例

你不能简单地将UC\U Start\U研究的可视性转换为代码中的可视性吗

让我告诉你怎么做。 试一试


最可靠的方法是使用绑定。在UserControl1中提供一个依赖属性,该值应该控制UserControl2的可见性,将UserControl2可见性绑定到它如果使用bool,那么必须使用converter,请参见问题。好的,我来看看这个thanks@Unkle-Wik,你需要看到我更新的答案。
<Grid Name="MainGrid">

    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="*"/>
    </Grid.ColumnDefinitions>
    <UserControlLibrary:UC_StartStudy x:Name="UC_Start_Study"  Grid.Column="1" Height="Auto" Width="Auto" Margin="70 0 0 0" Visibility="Hidden"/>

   <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="0.1*" MaxWidth="240" MinWidth="240" />
            <ColumnDefinition Width="*"/>
        </Grid.ColumnDefinitions>
        <UserControlLibrary:UC_MenuSlider x:Name="UC_MenuSlider"  Grid.Column="0"/>
   </Grid>

</Grid>
<Grid Name="Grid_Menu" HorizontalAlignment="Stretch">

    <Grid.RowDefinitions>
     <RowDefinition Height="*"/>
    </Grid.RowDefinitions>


    <Button x:Name="Start_Study"   Grid.Row="0" Grid.Column="0"  Margin="0" Content="Start Study" FontSize="16" Click="Start_Study_Click">
    </Button>
</Grid>
public void Start_Study_Click(object sender, RoutedEventArgs e)
{
    var startStudy = new UserControlLibrary.UC_StartStudy();
    startStudy.Visibility = Visibility.Visible;
}
public void Start_Study_Click(object sender, RoutedEventArgs e)
{
   UC_Start_Study.Visibility = Visibility.Visible;
}
<Window.Resourses>
     <BooleanToVisibilityConverter x:Key="BooltoVisible" />
</Window.Resourse>

.....
<UserControlLibrary:UC_StartStudy x:Name="UC_Start_Study"  Grid.Column="1" Height="Auto" Width="Auto" Margin="70 0 0 0" Visibility="{Binding IsUCStartStudyVisible,  Converter={StaticResource BooltoVisible}}"/>
//implement INotifyPropertyChanged
public event PropertyChangedEventHandler PropertyChanged;


private void RaisePropertyChange(String propertyName = "")
{
    if (PropertyChanged != null)
    {
        PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
    }
}

//property for data binding
private bool _isucstartstudyvisible = false;
public bool IsUCStartStudyVisible
{
   get{return _isucstartstudyvisible;}
   set{_isucstartstudyvisible=value; RaisePropertyChange("IsUCStartStudyVisible");}
}

//your event to change the visibility
public void Start_Study_Click(object sender, RoutedEventArgs e)
{
   IsUCStartStudyVisible=true;
}
  public void Start_Study_Click(object sender, RoutedEventArgs e)
        {
              this.UC_Start_Study.Visibility = Visibility.Visible;
        }