如何在点击位于一个MainWindow(C#/ Xaml)中的另一个UserControl显示/调用用户控件

时间:2014-10-10 08:54:25

标签: c# wpf xaml user-controls

我现在很困,我会解释我的问题和我想要的。 在我的解决方案中,我有 mainWindow ,在 MainWindow 中,我调用第一个userControl 谁位于 userControlLibrary 即可。我是一个带按钮的菜单。我想当我点击第一个userControl的第一个按钮时,我希望将第二个用户控件可见性设置为可见(也位于 userControlLibrary )。但我尝试了很多东西,但没有人工作。

第一个userControl是 UC_MenuSlider UC_Start_Study 是第二个在点击第一个按钮后必须可见的人。发布时 UC_Start_Study隐藏

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

<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'但我真的不明白它的工作原理。

我希望我的问题足够清楚,先谢谢你的问题

2 个答案:

答案 0 :(得分:0)

问题是因为您要创建新的UC_StartStrudy并将其Visibility设置为Visible。您真正需要的是设置VisibilityXAML的{​​{1}} UC_Start_Study

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

您还可以使用XAML数据绑定Visibility的{​​{1}}属性,并在代码中设置其值:

XAML:

UC_StartStrudy

代码(记得实施INotifyPropertyChanged):

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

答案 1 :(得分:0)

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

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

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

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