WPF Más . Xaml ablakot megjeleníteni a MainWindow. Xaml-ben?
Azt szeretném, hogy a MainWindow.xaml Grid-jében megjelenjen a LoginControl.xaml teljes tartalma.
Addig eljutottam, hogy a LoginControl.xaml.cs DataContext-jét átadjam a MainWindow.xaml.cs-nek.
De ennek a tartalmát megjeleníteni nem tudom.
(Persze ezt úgy szeretném, hogy majd később cserélni tudjam más xaml-ekre is a MainWindow.xaml tartalmát.)
MainWindow.xaml.cs:
public partial class MainWindow : Window
{
ViewModel vm;
public MainWindow()
{
InitializeComponent();
Loaded += MainWindow_Loaded;
}
private void MainWindow_Loaded(object sender, RoutedEventArgs e)
{
vm = ViewModel.GetVM;
DataContext = vm;
}
}
MainWindow.xaml:
<Grid DataContext="{Binding Path=CurrentControl,Mode=TwoWay}" VerticalAlignment="Center" HorizontalAlignment="Stretch"/>
LoginControl.xaml.cs
public partial class LoginControl : UserControl
{
ViewModel vm;
public LoginControl()
{
InitializeComponent();
Loaded += LoginControl_Loaded;
}
private void LoginControl_Loaded(object sender, RoutedEventArgs e)
{
vm = ViewModel.GetVM;
DataContext = vm;
}
}
LoginControl.xaml:
<Grid VerticalAlignment="Center">
<StackPanel>
<Label Content="Workload Reporter - Login" FontSize="25" HorizontalAlignment="Center" FontFamily="Sitka Small"></Label>
<Label Foreground="Red" Content="Login Error - UserName/Password incorrect" Visibility="{Binding Path=LoginError,Converter={StaticResource BoolToVisibility}}" VerticalAlignment="Center" HorizontalAlignment="Center" FontSize="14.667"></Label>
<Label Content="Name" FontSize="21.333"></Label>
<TextBox x:Name="txtUserName" FontSize="16" Margin="5"></TextBox>
<Label Content="Password" FontSize="21.333"></Label>
<PasswordBox x:Name="Password" Margin="5"></PasswordBox>
<Button x:Name="btnLogin" Content="Login" Margin="5" Click="btnLogin_Click"></Button>
<Button x:Name="btnChangePassword" Content="Change password" Margin="5" Click="btnChangePassword_Click"></Button>
</StackPanel>
</Grid>
ViewModel.cs:
class ViewModel : INotifyPropertyChanged
{
static ViewModel vm;
ContentControl currentControl;
public event PropertyChangedEventHandler PropertyChanged;
public static ViewModel GetVM
{
get
{
if (vm == null)
{
vm = new ViewModel();
}
return vm;
}
}
public ContentControl CurrentControl
{
get
{
return currentControl;
}
set
{
currentControl = value; RaisePropertyChanged();
}
}
private ViewModel()
{
currentControl = new ContentControls.LoginControl();
}
public void RaisePropertyChanged([CallerMemberName] string name = "")
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(name));
}
}
}
Végül rájöttem saját magam:
MainWindow.xaml:
<Grid>
<ContentControl Content="{Binding Path=CurrentControl,Mode=TwoWay}" VerticalAlignment="Center" HorizontalAlignment="Stretch"></ContentControl>
</Grid>
Kapcsolódó kérdések:
Minden jog fenntartva © 2025, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!