繁体   English   中英

如何同时单击位于一个MainWindow(C#/ Xaml)中的另一个UserControl来显示/调用另一个UserControl

[英]How to diplay/call an UserControl from another UserControl at click both situated in one MainWindow (C#/Xaml)

我现在很困,我要解释我的问题和我想要的。 在我的解决方案中,我有一个mainWindow ,在那个MainWindow中,我叫第一个位于userControlLibrary中的userControl 我没有带按钮的菜单。 我想当我单击第一个userControl的第一个按钮时,我想将第二个usercontrol可见性设置为可见 (位于userControlLibrary中 )。 但是我尝试了很多事情,但是没人能用。

第一个userControl是UC_MenuSlider ,第二个UC_Start_Study是UC_Start_Study,单击第一个userControl后必须对其进行访问。 在启动时, UC_Start_Study被隐藏

这是我的Mainwindow代码的一部分

<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>

我的第一个UserControl(UC_MenuSlider)的一部分代码:

<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>

首先是一个基本事件,只需在我的第一个userControl中单击一个事件。 像这样的代码:

public void Start_Study_Click(object sender, RoutedEventArgs e)
{
    var startStudy = new UserControlLibrary.UC_StartStudy();
    startStudy.Visibility = Visibility.Visible;
}

不行 然后我使用“ RoutedEvent”,但我不太了解它的作用。

我希望我的问题足够清楚,在此先感谢您的协助

问题是因为您要创建一个新的UC_StartStrudy并将其Visibility设置为Visible 您真正需要的是在XAML设置一个的VisibilityUC_Start_Study

public void Start_Study_Click(object sender, RoutedEventArgs e)
{
   UC_Start_Study.Visibility = Visibility.Visible;
}

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

XAML:

<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}}"/>

代码(记住实现INotifyPropertyChanged ):

//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;
}

我不明白为什么要使用UC_StartStudy()的新实例,因为您已经在MainWindow中添加了它。

您不能简单地将UC_Start_Study的可见性变为代码内的可见性。

让我告诉你如何做到这一点。 尝试

  public void Start_Study_Click(object sender, RoutedEventArgs e)
        {
              this.UC_Start_Study.Visibility = Visibility.Visible;
        }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM