如何从位于一个主窗口(C#/Xaml)中的另一个UserControl中双击/调用UserControl
本文关键字:UserControl Xaml 另一个 调用 双击 于一个 窗口 | 更新日期: 2023-09-27 18:26:05
我现在很困,我要解释我的问题和我想要什么。在我的解决方案中,我有一个主窗口,在该mainWindow中,我调用第一个位于用户控制库的用户控制。这是一份带按钮的菜单。我希望当我单击第一个用户控件的第一个按钮时,我希望将第二个用户控件的可见性设置为可见(也位于用户控件库中)。但我尝试了很多东西,但没有一个有效。
第一个用户Control是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",但我真的不明白它是谁用的。
我希望我的问题足够清楚,提前感谢您的回答
问题是因为您正在创建一个新的UC_StartStrudy
并将其Visibility
设置为Visible
。您真正需要的是设置XAML
:UC_Start_Study
中的Visibility
public void Start_Study_Click(object sender, RoutedEventArgs e)
{
UC_Start_Study.Visibility = Visibility.Visible;
}
您还可以使用XAML数据绑定UC_StartStrudy
的Visibility
属性,并在代码中设置其值:
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()的新实例,因为你已经在主窗口中添加了它。
难道你不能简单地将UC_Start_Study的可见性设置为在代码中可见吗。
让我来教你怎么做。尝试
public void Start_Study_Click(object sender, RoutedEventArgs e)
{
this.UC_Start_Study.Visibility = Visibility.Visible;
}